Pytorch RuntimeError:维度指定为0,但tensor没有维度

Pytorch RuntimeError:维度指定为0,但tensor没有维度,pytorch,Pytorch,我试图使用MNIST数据集实现简单的NN,但我一直遇到这个错误 将matplotlib.pyplot作为plt导入 import torch from torchvision import models from torchvision import datasets, transforms from torch import nn, optim import torch.nn.functional as F import helper transform = transforms.ToTen

我试图使用MNIST数据集实现简单的NN,但我一直遇到这个错误 将matplotlib.pyplot作为plt导入

import torch
from torchvision import models
from torchvision import datasets, transforms
from torch import nn, optim
import torch.nn.functional as F
import helper

transform = transforms.ToTensor()

train_data = datasets.MNIST(root='data', train=True,
                                   download=True, transform=transform)
test_data = datasets.MNIST(root='data', train=False,
                                  download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size = 20, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_data, batch_size = 20, shuffle=True)
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.fc1 = nn.Linear(784,10)

    def forward(self,x):

        x = x.view(-1,784)
        x = F.relu(self.fc1(x))
        x = F.log_softmax(x, dim = 1)
        return x


model = Net()
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr = 0.003)

epochs = 20
model.train()
for epoch in range(epochs):
    train_loss = 0

    for image, lables in train_data:

        optimizer.zero_grad()

        output = model(image)
        loss = criterion(output, lables)
        loss.backwards()
        optimizer.step()
        train_loss += loss.item()*image.size(0)
    train_loss = train_loss/len(train_data.dataset)

    print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch+1, train_loss))
这里是错误
RuntimeError:dimension指定为0,但tensor没有维度

您直接遇到的问题是NLL loss需要一个
标签
(您正在拼写它
标签
顺便说一句)至少为1维的张量,并且它得到一个0维张量(也称为标量)。如果您看到此类消息,最好只打印(output.shape、labels.shape),以便于检查。此错误的来源是,您可能错误地运行了“序列号数据中的图像标签”的
,而不是“序列号加载器中的图像标签”的
。结果是您的数据没有成批处理-成批处理来自
dataset
的标量将创建缺少的维度
NLLLoss
抱怨

一旦我们解决了这个问题,我们将继续向后解决
问题
->
问题
最后解决
len(train\u data.dataset)
->
len(train\u data)
。然后循环工作(如果它是一个合理的网络等,我没有测试)


作为附带说明,您可以通过使用将
NLLLoss
log\u softmax
组合在一起,这具有额外的数值稳定性。

对于未来:请不仅报告引发的异常,还报告一些堆栈跟踪。我必须运行您的代码来获取上下文,这对任何回答的人来说都是很有帮助的,因为他们可以直接知道,在loss=criteria(output,lables)
中的第42行
文件“so.py”中抛出了异常。:。如果这有助于任何人谁是寻找类似的解决办法,想说,我也有这个问题,我不得不使用加载器(课程tbh的一部分)。我环顾四周,发现了关于Github的现有讨论。请在下面找到它们:1。2.我尝试了以下方法。问题解决了