微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将掩码合并到负似然损失中 (torch.nn.functional.nll_loss)

如何解决如何将掩码合并到负似然损失中 (torch.nn.functional.nll_loss)

你好,我正在为语言建模实现一个 lstm 对于家庭作业,我处于亏损实施阶段。我们的讲师告诉我们使用 F.nll_loss,但序列被填充,我们必须考虑给出的掩码,该掩码告诉我们序列何时停止。

输入:

  • log_probas(batch_size、sequence_length(填充)、词汇量大小)
  • 目标(batch_size、sequence_length(填充))
  • 掩码(batch_size,sequence_length(填充)

在不考虑掩码的情况下工作的幼稚实现:

import torch.nn.functional as F
loss = F.nll_loss(log_probas.transpose(1,2),targets)

我一直在网上爬行并敲打着脑袋,但似乎无法找到有关如何将掩码纳入损失平均方案的答案。

解决方法

您可以重塑张量并使用掩码来选择未填充的标记,并计算损失

vocab_size = log_probas.size(-1)
log_probas = log_probas.view(-1,vocab_size)
target = target.view(-1)
mask = mask.view(-1).bool()
loss = F.nll_loss(log_probas[mask],targets[mask])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。