gpt4 book ai didi

pytorch - 运行时错误: dimension specified as 0 but tensor has no dimensions

转载 作者:行者123 更新时间:2023-12-03 08:57:47 28 4
gpt4 key购买 nike

我试图使用 MNIST 数据集实现简单的神经网络,但我不断收到此错误 将 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:维度指定为 0 但张量没有维度

最佳答案

您直接遇到的问题是,NLL 损失需要一个至少 1 维的 labels (顺便说一句,您将其拼写为 lables)张量,并且它得到一个0 维张量(也称为标量)。如果您看到此类消息,最好只是print(output.shape, labels.shape)以便于检查。此错误的根源在于您可能错误地运行了 for image, labels in train_data 而不是 for image, labels in train_loader。结果是您的数据未进行批处理 - 对来自数据集的标量进行批处理会创建NLLLoss提示的缺失维度。

一旦我们解决了这个问题,我们就会继续修复backwards -> backward,最后修复len(train_data.dataset) -> len(train_data)。然后循环就可以工作(如果它是一个合理的网络等,我没有测试)。

顺便说一句,您可以使用 CrossEntropyLoss 组合 NLLLosslog_softmax ,其优点是具有额外的数值稳定性。

关于pytorch - 运行时错误: dimension specified as 0 but tensor has no dimensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com