Pytorch NN error: Expected input batch_size (64) to match target batch_size (30)
Pytorch NN error: Expected input batch_size (64) to match target 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)}")
不是 100% 确定,但我认为错误出在这一行:
nn.Linear(7500, 4950)
除非您绝对确定您的输入是 7500,否则请输入 1 而不是 7500。请记住,第一个值将始终是您的输入大小。通过输入 1,您将确保您的模型可以处理任何尺寸的图像。
顺便说一下,PyTorch 有一个 flatten 函数。使用 nn.Flatten
而不是 images.view()
因为您不想犯任何形状错误并必然浪费更多时间。
您犯的另一个小错误是您继续使用 images and image
作为 for 循环中的变量和参数。这是非常糟糕的做法,因为每当有人阅读您的代码时,您都会让他们感到困惑。确保您不会一遍又一遍地重复使用相同的变量。
另外,你能提供更多关于你的数据的信息吗?比如是灰度,image_size,等等
错误出现在“for image, labels in trainloader:”这一行(应该是图像)。已修复,模型训练正常。
我目前正在训练一个神经网络来对食物图像的食物组进行分类,从而产生 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)}")
不是 100% 确定,但我认为错误出在这一行:
nn.Linear(7500, 4950)
除非您绝对确定您的输入是 7500,否则请输入 1 而不是 7500。请记住,第一个值将始终是您的输入大小。通过输入 1,您将确保您的模型可以处理任何尺寸的图像。
顺便说一下,PyTorch 有一个 flatten 函数。使用 nn.Flatten
而不是 images.view()
因为您不想犯任何形状错误并必然浪费更多时间。
您犯的另一个小错误是您继续使用 images and image
作为 for 循环中的变量和参数。这是非常糟糕的做法,因为每当有人阅读您的代码时,您都会让他们感到困惑。确保您不会一遍又一遍地重复使用相同的变量。
另外,你能提供更多关于你的数据的信息吗?比如是灰度,image_size,等等
错误出现在“for image, labels in trainloader:”这一行(应该是图像)。已修复,模型训练正常。