首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow NMT和注意教程--需要帮助理解损失函数

Tensorflow NMT和注意教程--需要帮助理解损失函数
EN

Stack Overflow用户
提问于 2018-11-03 05:50:43
回答 1查看 256关注 0票数 1

我正在关注Tensorflow的神经机器翻译教程(链接),但还不清楚一些实现细节。如果有人能帮助我澄清或推荐我到一个来源/更好的地方问问题,那就太好了:

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_lossbatch_loss不应该是所有时间步骤和整个批处理的平均损失吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 16:22:08

看来损失应该越小越大。

由于pad令牌在计算损失时被蒙住了,因此损失确实变得更小了。

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

代码语言:javascript
复制
for t in range(1, targ.shape[1])

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

我希望这能澄清这一点:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53128780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档