【发布时间】:2021-12-07 16:57:28
【问题描述】:
我正在关注书中的一个例子。该示例定义了 nn.NLLLoss() 函数,其输入让我感到困惑。
我的模型的最后一步是 nn.LogSoftmax,它为我提供了以下张量输出(我在单个图像上尝试示例):
tensor([[-0.7909, -0.6041]], grad_fn=<LogSoftmaxBackward>)
张量具有图像是鸟还是飞机的概率。该示例为鸟定义了 0,为飞机定义了 1。
现在在定义损失函数时,该示例同样将上述张量和图像的正确标签作为输入:
loss = nn.NLLLoss()
loss( out, torch.tensor([0])) #0 as the image is of a bird
我无法理解我们为什么要传递图像的标签。我的猜测是,标签向模型指定了在计算损失时要考虑的概率指数。但是,如果是这种情况,为什么我们需要将标签作为张量传递,我们可以同样将标签作为索引传递给 out 张量:
loss( out[0, 0] ) # [0, 0] since out is a 2d Tensor
【问题讨论】:
标签: python machine-learning pytorch