我目前正在训练一个神经网络来对食物图像的食物组进行分类,从而产生 5 个输出类别。然而,每当我开始训练网络时,我都会收到此错误:ValueError: Expected input batch_size (64) to match target batch_size (30).这是我的神经网络定义和训练代码。我真的很感谢帮助,我对 pytorch 比较陌生,无法弄清楚我的代码中到底有什么问题。谢谢!#Define the Network Architechturemodel = nn.Sequential(nn.Linear(7500, 4950), nn.ReLU(), nn.Linear(4950, 1000), nn.ReLU(), nn.Linear(1000, 250), nn.ReLU(), nn.Linear(250, 5), nn.LogSoftmax(dim = 1))#Define losscriterion = nn.NLLLoss()#Initial forward passimages, labels = next(iter(trainloader))images = images.view(images.shape[0], -1)print(images.shape)logits = model(images)print(logits.size)loss = criterion(logits, labels)print(loss)#Define Optimizeroptimizer = optim.SGD(model.parameters(), lr = 0.01)训练网络:epochs = 10for e in range(epochs): running_loss = 0 for image, labels in trainloader: #Flatten Images images = images.view(images.shape[0], -1) #Set gradients to 0 optimizer.zero_grad() #Output output = model(images) loss = criterion(output, labels) #Where the error occurs loss.backward() #Gradient Descent Step optimizer.step() running_loss += loss.item() else: print(f"Training loss: {running_loss/len(trainloader)}")
2 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
不是 100% 确定,但我认为错误在于这一行:
nn.Linear(7500, 4950)
除非您绝对确定您的输入是 7500,否则请输入 1 而不是 7500。请记住,第一个值始终是您的输入大小。通过设置 1,您将确保您的模型可以处理任何尺寸的图像。
顺便说一句,PyTorch 有一个扁平化功能。使用nn.Flatten
而不是使用,images.view()
因为您不想犯任何形状错误并必然浪费更多时间。
您犯的另一个小错误是您继续images and image
在 for 循环中用作变量和参数。这是非常糟糕的做法,因为每当别人阅读你的代码时,你都会让他们感到困惑。确保不要一遍又一遍地重复使用相同的变量。
另外,您能否提供有关您的数据的更多信息?比如灰度、image_size 等。
- 2 回答
- 0 关注
- 352 浏览
添加回答
举报
0/150
提交
取消