我遵循了 Pytorch 文檔并為 MNIST 數據集制作了一個極其簡單的分類器。下面是我的代碼:import numpy as npimport torchimport torchvisionfrom torchvision import transforms, datasetsimport torch.nn as nnimport torch.nn.functional as Ftransform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize([0.5], [0.5]) ])train = datasets.MNIST('', train=True, download=True, transform=transform)test = datasets.MNIST('', train=False, download=True, transform=transform)trainset = torch.utils.data.DataLoader(train, batch_size=1, shuffle=True)testset = torch.utils.data.DataLoader(test, batch_size=1, shuffle=False)class Classifier(nn.Module): def __init__(self, D_in, H, D_out): super(Classifier, self).__init__() self.linear_1 = torch.nn.Linear(D_in, H) self.linear_2 = torch.nn.Linear(H, D_out) def forward(self, x): x = self.linear_1(x).clamp(min=0) x = self.linear_2(x) return F.log_softmax(x, dim=1)net = Classifier(28*28, 128, 10)optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)for epoch in range(3): running_loss = 0.0 for X, label in iter(trainset): X = X.view(28*28, -1) optimizer.zero_grad() output = net(torch.flatten(X)) loss = nn.CrossEntropyLoss(output, label) loss.backward() optimizer.step() running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print(f'[{epoch + 1}, {i + 1}] loss: {running_loss / 2000}') running_loss = 0.0print("Finished training.")torch.save(net.state_dict(), './classifier.pth')出于某種原因,我得到了輸出IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)在該行:output = net(torch.flatten(X)在此先感謝您的幫助!
Pytorch MNIST 代碼返回 IndexError
慕田峪9158850
2023-03-22 16:36:48