当我在im2txt中阅读 im2txt 源代码时遇到问题。
有batch_loss
和total_loss
:batch_loss
为每批数据计算,并tf.Graphkeys.LOSSES
通过tf.add_loss(batch_loss)
调用添加。total_loss
得到了,它平均了 中的tf.losses.get_total_loss()
所有损失 tf.Graphkeys.LOSSES
。
问题:为什么total_loss会更新参数?我被这个问题困惑了很多天。
当我在im2txt中阅读 im2txt 源代码时遇到问题。
有batch_loss
和total_loss
:batch_loss
为每批数据计算,并tf.Graphkeys.LOSSES
通过tf.add_loss(batch_loss)
调用添加。total_loss
得到了,它平均了 中的tf.losses.get_total_loss()
所有损失 tf.Graphkeys.LOSSES
。
问题:为什么total_loss会更新参数?我被这个问题困惑了很多天。
评论中的讨论摘要:
训练损失是在小批量的前向传递中计算的。但是开始反向传播不需要实际的损失值。反向传播从误差信号开始,它等于在前向传播的值处评估的损失函数导数。所以损失值不影响参数更新,上报只是为了监控训练过程。例如,如果损失没有减少,则表明需要仔细检查神经网络模型和超参数。因此,通过平均来平滑报告的损失并不是什么大不了的事,只是为了让图表看起来更漂亮。
有关更多详细信息,请参阅此帖子。