【发布时间】:2018-11-22 05:51:18
【问题描述】:
我正在关注 Tensorflow 的注意力神经机器翻译教程 (link),但我不清楚一些实现细节。如果有人可以帮助澄清或将我推荐给来源/更好的地方询问,那就太好了:
1) def loss_function(real, pred):此函数计算特定时间步长(例如t)的损失,对整个批次进行平均。 t 处的标签为 <pad> 的示例(即没有真实数据,仅填充以使所有示例序列具有相同长度)被屏蔽,以免计入损失。
我的问题:看起来损失应该越小t 越大(因为更多的例子是<pad>,我们越远达到最大长度)。那么为什么损失是整个批次的平均损失,而不仅仅是有效(非<pad>)示例的数量? (这类似于使用tf.losses.Reduction.SUM_BY_NONZERO_WEIGHTS 而不是tf.losses.Reduction.SUM_OVER_BATCH_SIZE)
2)for epoch in range(EPOCHS)——>训练循环中定义了两个损失变量:
-
loss= 所有时间步的loss_function()输出的总和 -
batch_loss=loss除以时间步数
我的问题:为什么要根据 w.r.t 计算梯度? loss 而不是 batch_loss? batch_loss 不应该是所有时间步长和整个批次的平均损失吗?
非常感谢!
【问题讨论】:
-
在我看来你是对的,按照你建议的方式计算损失更合适。
标签: python tensorflow