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