Tensorflow プログラミングの問題 - Loss Nan

1. 分類問題では、クロスエントロピー損失関数をよく使います.クロスエントロピー損失関数は対数計算なので、対数の実数部が0になることはありませんので、 cross-entropy 範囲を実数部分に制限する必要があります, そうしないと数値アンダーフローの問題が発生します. 私たちが取ることができる方法は tf.clip_by_value(input,min_value,max_value) 関数を使用して下限を制限することです.実数の極限;

2. もう 1 つの状況は、トレーニングの開始後に損失関数の値が nan になることです. これは一般に、学習率が大きすぎて、学習率を下げる必要があるためです. または、トレーニング期間の後に nan が現れます.この場合 勾配爆発によって引き起こされる可能性があります. 典型的な状況は、RNN のトレーニング中に勾配爆発が発生することです. 勾配をクリップして、勾配の最大値を定数に制限することができます;

3. バッチの損失を計算するときに tf.reduce_mean() 関数を使用する別の関数があります. この関数にテンソルを投げる前に, テンソルはインデックスに従ってフィルタリングされます. バッチテンソルに修飾されたものがない場合、計算中に Nan が表示されます。このとき、reduce_mean 関数を reduce_sum 関数に置き換えます。

おすすめ

転載: blog.csdn.net/qq_40676033/article/details/110702169