PyTorch中交叉熵损失的输入维数

PyTorch中交叉熵损失的输入维数,pytorch,loss,index-error,Pytorch,Loss,Index Error,对于批次大小为1的二元分类问题,我需要使用logit和label值来计算损失 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_criteri

对于批次大小为1的二元分类问题,我需要使用logit和label值来计算损失

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 )

无交叉熵张量实际要求的输入维数是多少?

您传递的张量形状错误。
形状
应为()

  • 输入:
    (N,C)
    其中
    C
    =类数
  • 目标:
    (N)
    其中每个值都是
    0≤ 目标[i]≤ C−1
因此,在这里,
b_logits
形状应该是
([1,2])
而不是
([2])
,为了使它成为正确的形状,您可以使用类似
b_logits.view(1,-1)

b_标签
形状应为
([1])

例:

b_logits=torch.tensor([0.1198,0.1911],需要_grad=True)
b_标签=火炬张量([1])
损失标准=nn.CrossEntropyLoss()
损失=损失标准(b_logits.view(1,-1),b_标签)
损失
张量(0.6581,梯度fn=)

我认为您缺少一个维度,即批次维度。比较没有批量大小的
[0,1]
,和批量大小为1的
[0,1]]
。@amdex是的,这是有效的。使用b_logits.unsqueze(0)添加批次维度。你能把这个写下来作为回答吗?
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)