9.7.3 损失函数

回忆一下,super(MaskedSoftmaxCELoss, self).forward就相当于直接计算损失函数,这是nn.Module的普遍做法;还要注意nn.CrossEntropyLoss会对传入的数据做\(\text{Softmax}\),不需要我们传入一个已经做了\(\text{Softmax}\)的数据
nn.CrossEntropyLoss的输入要求如下
image
unweighted_loss的形状是(batch_size, num_steps),也就是对应每一个样本的每一步的直接的交叉熵损失

weighted_loss那一行,应该不是mean,应该是先sum之后再除以有效样本长度。评论区有人提出,但是没有明确回答,不知道是不是应该改(但其实感觉好像也有问题,因为预测输出和标签的长度可能不一致,那么有效样本长度到底该取哪一个呢?)。感觉可能不改,从后面的训练来看,这里传入的valid_len是标签的有效长度,因为输出的长度可能完全跟标签不一样,这样子就无法确定分母到底是谁的长度
image

posted @ 2025-02-15 16:54  最爱丁珰  阅读(13)  评论(0)    收藏  举报