keras訓練cnn模型時loss為nan
1.首先記下來如何解決這個問題的:由於我代碼中 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
即損失函數用的是categorical_crossentropy所以,在pycharm中雙擊shift鍵,尋找該函數,會出現keras.loss模塊中有該函數,進入該函數后,
原函數為:
def categorical_crossentropy(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred)
修改為:
def categorical_crossentropy(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred+1e-5)
網上很多都是tensorflow的解決方案,找了好久好久才在一篇博客的啟發下,想着去找這個損失函數。https://www.cnblogs.com/hutao722/p/9761387.html
2.另外是為什么會出現這種現象(當然還會有其他可能,這里只記下我這種問題出現的原因)
我這里是在計算損失函數時求log的時候遇到了log(0)則會導致nan