1

im2txtソースコードをim2txtに読み込むと問題が発生します。テンソルフロー内のbatch_lossとtotal_loss = tf.get_total_loss()

batch_losstotal_lossがありますbatch_lossは、すべてのバッチデータに対して計算され、そしてtf.add_loss(batch_loss)呼び出しによってtf.Graphkeys.LOSSESに追加されます。 total_lossにはtf.losses.get_total_loss()があり、すべての損失は平均でtf.Graphkeys.LOSSESです。

質問:パラメータがtotal_lossによって更新されるのはなぜですか?私はこの問題によって何度も混乱しました。

+0

私は何も理解しませんでした。損失報告はバックプロパゲーションとパラメータの更新にどのように影響しますか? – Maxim

+0

私の意見では、各バッチデータによって計算されるべきbatch_lossによってパラメータが更新されます。これは[im2txt](https://github.com/tensorflow/models/blob/master/research/)の機械学習でよく起こります。 im2txt/im2txt/show_and_tell_model.py)、すべてのデータセットが多数のバッチに分割され、im2txtは各バッチデータの損失を計算し、損失をtf.Graphkeys.LOSSESに追加してからtotal_lossを計算し、最後にtotal_lossしたがって、パラメータはtotal_lossでは更新されますが、batch_lossでは更新されないのはなぜですか? – legend4917

+0

バックプロップとパラメータの更新は、評価された損失*導関数*に依存します。生の損失額はちょうどヘルパー情報です。 – Maxim

答えて

0

コメントでの議論の要約:

トレーニング損失はミニバッチオーバー往路で計算されます。しかし、実際の損失値は、バックプロットを開始するのに、は必要ありません。バックプロップは、フォワードパスからの値で評価される損失関数導関数に等しいエラー信号で開始されます。したがって、損失額はパラメータの更新に影響を与えず、単にトレーニングプロセスを監視するために報告されます。たとえば、損失が減少しない場合、それはニューラルネットワークモデルとハイパーパラメータを再確認するための記号です。だから、グラフを見栄え良くするために平均化することで、報告された損失を平滑化することは大したことではありません。

詳細はthis postを参照してください。

関連する問題