python - Tensorflow NMT with Attention 教程——需要帮助理解损失函数

标签 python tensorflow

我正在关注 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除以时间步数

我的问题:为什么要计算梯度? loss而不是batch_loss ?不应该batch_loss是所有时间步长和整个批处理的平均损失?

非常感谢!

最佳答案

It seems loss should get smaller the bigger t

由于在计算损失时填充代币被屏蔽,损失确实变小了。

Batch_loss 仅用于打印每个批处理计算的损失。批处理损失是针对每个批处理和所有时间步计算的。

for t in range(1, targ.shape[1])

此循环在批处理的所有时间步上运行,并通过屏蔽填充值来计算损失。

我希望这能解决问题:)

关于python - Tensorflow NMT with Attention 教程——需要帮助理解损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53128780/

相关文章:

python - 我们如何从字典列表的字典创建数据框

python - 狮身人面像 : Putting a code segment at the first line of an unordered list item

python - TensorFlow 仅适用于 GPU 0

python - Tensorflow:尝试使用未初始化的值 beta1_power

python - 使用 TensorFlow 后端。导入 tensorflow 时出错

python - 如何在keras中实现扩张卷积?

python - TensorFlow随机森林获取标签作为预测输出

tensorflow - 如何解释 zigzag 训练损失?

python - 从 python 作为 google 组发送电子邮件

tensorflow - Tensorflow 的 iOS 示例有任何状态更新吗?