如何将掩码合并为负似然损失(torch.nn.functional.nl_loss)



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

输入:

  • log_probas(batch_size、sequence_length(填充(、词汇表大小(
  • targets(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])

最新更新