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