Pertanyaan Tensorflow Loss Pergi ke NaN


Saya menggunakan fungsi tf.nn.sigmoid_cross_entropy_with_logits untuk kehilangan dan itu akan NaN.

Saya sudah menggunakan kliping gradien, satu tempat di mana divisi tensor dilakukan, saya telah menambahkan epsilon untuk mencegah pembagian dengan nol, dan argumen untuk semua fungsi softmax memiliki epsilon yang ditambahkan ke mereka juga.

Namun, saya mendapatkan jalan tengah NaN melalui pelatihan.

Apakah ada masalah yang diketahui di mana tensorflow melakukan ini yang saya lewatkan? Ini cukup membuat frustasi karena kehilangan secara acak akan NaN selama pelatihan dan merusak segalanya.

Juga, bagaimana saya bisa mendeteksi apakah langkah kereta akan menghasilkan NaN dan mungkin melewatkan contoh itu sama sekali? Ada saran?

EDIT: Jaringan adalah Mesin Turing Neural.

EDIT 2: Saya telah mengunggah beberapa kode sini. Ini tidak dikomentari, dan akan sangat masuk akal bagi mereka yang telah membaca makalah NTM oleh Graves et al. Tersedia disini: https://arxiv.org/abs/1410.5401

Saya tidak yakin apakah semua kode saya mengikuti persis bagaimana para penulis dari makalah ini dimaksudkan. Saya hanya melakukan ini sebagai latihan dan saya tidak memiliki mentor untuk mengoreksi saya.

EDIT 3: Berikut kode untuk pemangkasan gradien:

optimizer = tf.train.AdamOptimizer(self.lr)
gvs = optimizer.compute_gradients(loss)
capped_gvs =\
  [(tf.clip_by_value(grad, -1.0, 1.0), var) if grad != None else (grad, var) for grad, var in gvs]
train_step = optimizer.apply_gradients(capped_gvs)

Saya harus menambahkan if grad != None kondisi karena saya mendapatkan kesalahan tanpa itu. Mungkinkah masalahnya ada di sini?

Solusi Potensial: Saya menggunakan tf.contrib.losses.sigmoid_cross_entropy untuk sementara waktu sekarang, dan sejauh ini kerugian belum menyimpang. Akan menguji lagi dan melaporkan kembali.


4
2017-11-25 16:55


asal


Jawaban:


Saya tahu ini sudah lama sejak ini ditanyakan, tetapi saya ingin menambahkan solusi lain yang membantu saya, di atas kliping. Saya menemukan bahwa, jika saya meningkatkan ukuran batch, kerugian cenderung tidak mendekati 0, dan tidak berakhir (seperti yang belum) pergi ke NaN. Semoga ini membantu siapa saja yang menemukan ini!


1
2017-08-07 17:53



Gunakan 1e-4 untuk tingkat pembelajaran. Yang itu sepertinya bekerja untukku dengan pengoptimal Adam. Bahkan jika Anda klip gradien itu masih bisa menyimpang. Juga yang lain licik adalah mengambil akar kuadrat karena meskipun akan stabil untuk semua input positif gradiennya menyimpang sebagai nilai mendekati nol. Akhirnya saya akan memeriksa dan memastikan semua input ke model tersebut masuk akal.


0
2017-11-25 19:36