log_softmax 和 nll_loss 经常组合使用,常见于各种分类算法。 cross_entropy_loss 底层实际也是调用的 log_softmax 和 nll_loss。该算子一步到位的将 softmax、log 及 nll 操作全部完成。 b = torch.Tensor([ [1, 2], [0.5, 3], [0.9, 4] ]) loss = nn.CrossEntropyLoss() l1 = loss(b, torch...
NLLLoss就是做的就是这个工作:将目标类的prob拿出来,再取个负号。为什么要取负号?是因为目标类的prob希望越大越好——这是最大似然的思想,最大似然应该对应最小loss,因此取负号就是最小loss。 正如图中看到的,logsoftmax的目标类=-3.0728,取负号=3.0728,就是NLLLoss的输出,也是CrossEntropyLoss的输出 ...
loss = nn.NLLLoss2d()out= loss(x, y) print(out) AI代码助手复制代码 输入函数,得到loss=0.7947 来手动计算 第一个label=1,则 loss=-1.3133 第二个label=0, 则loss=-0.3133 . … … loss= -(-1.3133-0.3133-0.1269-0.6931-1.3133-0.6931-0.6931-1.3133-0.6931)/9 =0.7947222222222223 AI代码助手复制代...