PyTorch中交叉熵损失的输入维度。

问题描述 投票:1回答:1

对于一个二元分类问题,有 batch_size = 1我有对数和标签值,我需要用它们来计算损失。

logit: tensor([0.1198, 0.1911], device='cuda:0', grad_fn=<AddBackward0>)
label: tensor(1], device='cuda:0')
# calculate loss
loss_criterion = nn.CrossEntropyLoss()
loss_criterion.cuda()
loss = loss_criterion( b_logits, b_labels )

然而,这总是导致以下错误。

IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)

CrossEntropyLoss到底要求什么输入维度?

pytorch loss index-error
1个回答
1
投票

你传错了时器的形状。shape 应该是(从医生)

  • 输入。(N,C) 其中 C =班级数
  • 目标。(N) 其中每个值是 0 ≤ targets[i] ≤ C−1

所以在这里。b_logits 形状应该是 ([1,2]) 而不是 ([2]) 为了使其形状正确,你可以使用 torch.view 喜欢 b_logits.view(1,-1).

而且 b_labels 形状应该是 ([1]). 前..:

b_logits = torch.tensor([0.1198, 0.1911], requires_grad=True)
b_labels = torch.tensor([1])
loss_criterion = nn.CrossEntropyLoss()

loss = loss_criterion( b_logits.view(1,-1), b_labels )
loss
tensor(0.6581, grad_fn=<NllLossBackward>)
© www.soinside.com 2019 - 2024. All rights reserved.