python - 如何将掩码纳入负似然损失 (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])
推荐阅读
- arrays - 什么是元组作为数据结构,它与列表和数组有何不同?
- c# - 如何通过 C# Oracle.managedDataAccess dll、在 ORACLE 存储过程中创建的 UDT 将数据发布到 UDT
- networking - IP 掩码 255.255.255.226 是否有效?
- mysql - Mysql group by 具有不同的和内部连接
- java - 防止多个线程改变同一个对象
- sql - SQL:是否可以将 dd-mon-yy 转换为一天中的某个时间?
- java - 给定一个字符串/文本,我如何从给定的字符串/文本中获取每对字母?
- c - C – 将用户输入替换为 *******(密码)
- excel - 阅读 XLS 附件
- excel - 如何使用 Excel TEXTJOIN 连接列中的所有行