我正在使用tf.nn.sigmoid_cross_entropy_with_logits函數來計算損失,它將返回到NaN。Tensorflow損失去NaN
我已經在使用漸變剪裁,張量分割被執行的一個地方,我已經添加了一個epsilon以防止被零除,並且所有softmax函數的參數也有一個添加到它們的epsilon。
但是,我通過培訓獲得了NaN的中途。
是否有任何已知的問題,張量流這樣做,我錯過了? 這很令人沮喪,因爲在訓練過程中損失會隨機進入NaN並毀掉一切。
另外,我怎麼可能去檢測火車的步驟是否會導致NaN,並可能完全跳過這個例子?有什麼建議麼?
編輯:網絡是一個神經圖靈機。
編輯2:我已經上傳了一些代碼here。 它沒有評論,並且對那些已經閱讀Graves等人的NTM論文的人來說是最有意義的。可在這裏:https://arxiv.org/abs/1410.5401
我不確定我的所有代碼是否完全遵循本文作者的意圖。我只是這樣做的做法,我沒有導師來糾正我。
編輯3:下面是梯度裁剪代碼:
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)
我不得不添加if grad != None
條件,因爲我得到了一個錯誤,沒有它。問題能在這裏嗎?
潛在的解決方案:我使用tf.contrib.losses.sigmoid_cross_entropy有一段時間了,到目前爲止的損失並沒有分歧。將測試更多並報告回來。
作爲第一個想法,請嘗試降低學習率。 – sygi
我使用Adam優化器進行漸變裁剪,因此不確定改變學習速度有多大幫助。我確實嘗試降低了學習速度,但仍然使用了NaN。事實上,在降低比率之前,它完成了沒有任何問題的訓練,我認爲我已經以某種方式解決了這個問題 - 但不是。 – SilverSlash
您是否曾嘗試在每層之前添加非常小的高斯噪聲? – broncoAbierto