今天用最原始的tensorfow.nn.conv2d構建一個三層CNN網絡並基於MNIST數據集訓練的時候出現了loss=nan的情況,折騰了一晚上,摸索出幾個的解決方案。
1.在loss函數某個位置添加了1e-10:
cross_entropy = tf.reduce_mean(-tf.reduce_sum(output * tf.log(prediction+1e-10), reduction_indices=[1]))
2.更換優化器
3.(最終解決辦法)對tf.nn.conv2d後的輸出進行tf.nn.relu的操作,因爲老版的tf.nn.conv2d不帶激活函數。
4. 當3行不通的時候用tf.nn.sigmoid。
5. 調整學習率,一般是調小,小概率是調大。
6. 檢查是否在最後一層全連接加了激活函數,若是,去掉
7. 多等一會,有的訓練器碧如SGD下降慢