Machine learning `THIndexTensor(尺寸)(目标,0)=批量尺寸和x27;失败。位于d:\projects\pytorch\torch\lib\thnn\generic/ClassNLLCriterion.c:54

Machine learning `THIndexTensor(尺寸)(目标,0)=批量尺寸和x27;失败。位于d:\projects\pytorch\torch\lib\thnn\generic/ClassNLLCriterion.c:54,machine-learning,neural-network,deep-learning,conv-neural-network,pytorch,Machine Learning,Neural Network,Deep Learning,Conv Neural Network,Pytorch,我试图在狗的品种数据集上训练我的神经网络。前馈后,在损耗计算过程中抛出以下错误: RuntimeError: Assertion `THIndexTensor_(size)(target, 0) == batch_size' failed. at d:\projects\pytorch\torch\lib\thnn\generic/ClassNLLCriterion.c:54 代码: criterion =nn.CrossEntropyLoss() optimizer=optim.Adam

我试图在狗的品种数据集上训练我的神经网络。前馈后,在损耗计算过程中抛出以下错误:

RuntimeError: Assertion `THIndexTensor_(size)(target, 0) == batch_size' failed.  at d:\projects\pytorch\torch\lib\thnn\generic/ClassNLLCriterion.c:54 
代码:

criterion =nn.CrossEntropyLoss()
optimizer=optim.Adam(net.parameters(),lr=0.001)


for epoch in range(10):  # loop over the dataset multiple times
        running_loss = 0.0
        print(len(trainloader))
        for i, data in enumerate(trainloader, 0):
            # get the inputs
            inputs, labels  = data

            # wrap them in Variable
            inputs, labels = Variable(inputs).float(), Variable(labels).float().type(torch.LongTensor)


            # zero the parameter gradients
            optimizer.zero_grad()

            # forward + backward + optimize
            outputs = net(inputs)

            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            # print statistics
            running_loss += loss.data[0]
            if i % 2000 == 1999:    # print every 2000 mini-batches
                print('[%d, %5d] loss: %.3f' %
                      (epoch + 1, i + 1, running_loss / 2000))
                running_loss = 0.0

print('Finished Training')
此行中生成错误:

loss = criterion(outputs, labels)

有什么问题吗?

我认为问题在于您缺少张量
标签上的批次维度。错误表明
0th
维度的大小不等于批次大小

尝试更改此选项:

loss = criterion(outputs, labels.unsqueeze(0))

请注意,
输出
张量应该比对应于每个标签分数的
标签
张量多一个维度,
标签
应该只包含正确标签的索引。

您能打印
输出
标签
的形状吗?在
loss=criteria(输出,标签)
之前使用
print(outputs.size(),labels.size())
。下面是“print(outputs.size(),labels.size())”torch.size([2500,120])torch.size([4])的结果