猿问

预期输入batch_size (64) 与目标batch_size (30) 匹配

我目前正在训练一个神经网络来对食物图像的食物组进行分类,从而产生 5 个输出类别。然而,每当我开始训练网络时,我都会收到此错误:


ValueError: Expected input batch_size (64) to match target batch_size (30).

这是我的神经网络定义和训练代码。我真的很感谢帮助,我对 pytorch 比较陌生,无法弄清楚我的代码中到底有什么问题。谢谢!


#Define the Network Architechture


model = 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 loss

criterion = nn.NLLLoss()


#Initial forward pass

images, 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 Optimizer

optimizer = optim.SGD(model.parameters(), lr = 0.01)

训练网络:


epochs = 10


for 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)}")


慕后森
浏览 353回答 2
2回答

幕布斯6054654

不是 100% 确定,但我认为错误在于这一行:nn.Linear(7500, 4950)除非您绝对确定您的输入是 7500,否则请输入 1 而不是 7500。请记住,第一个值始终是您的输入大小。通过设置 1,您将确保您的模型可以处理任何尺寸的图像。顺便说一句,PyTorch 有一个扁平化功能。使用nn.Flatten而不是使用,images.view()因为您不想犯任何形状错误并必然浪费更多时间。您犯的另一个小错误是您继续images and image在 for 循环中用作变量和参数。这是非常糟糕的做法,因为每当别人阅读你的代码时,你都会让他们感到困惑。确保不要一遍又一遍地重复使用相同的变量。另外,您能否提供有关您的数据的更多信息?比如灰度、image_size 等。

拉丁的传说

错误结果出现在“for image, labels in trainloader:”行中(应该是图像)。修复了它,模型现在训练得很好。
随时随地看视频慕课网APP
我要回答