Deep learning Pyrotch交叉熵会导致不匹配的批大小

Deep learning Pyrotch交叉熵会导致不匹配的批大小,deep-learning,neural-network,pytorch,loss-function,dataloader,Deep Learning,Neural Network,Pytorch,Loss Function,Dataloader,我正在使用dataloader加载一个图像文件夹 图像文件夹由三个类别(标签)组成,即 “/root/ant/dsd.png” “/root/ant/sfds.png” “/root/bee/dsf.png” “/root/whey/sfd.png” 这里有三类蚂蚁,蜜蜂,乳清 通过执行上面的代码,我得到了一个错误,输出和目标的大小不匹配 错误:预期输入批次大小(3)与目标批次大小(1)匹配 我认为错误可能在trainloader中,因为提取了不同形状的标签 data_transform

我正在使用dataloader加载一个图像文件夹

图像文件夹由三个类别(标签)组成,即

“/root/ant/dsd.png”

“/root/ant/sfds.png”

“/root/bee/dsf.png”

“/root/whey/sfd.png”

这里有三类蚂蚁,蜜蜂,乳清

通过执行上面的代码,我得到了一个错误,输出和目标的大小不匹配

错误:预期输入批次大小(3)与目标批次大小(1)匹配

我认为错误可能在trainloader中,因为提取了不同形状的标签

data_transform = transforms.Compose([
        transforms.Resize(size=28),
        transforms.ToTensor()
    ])
     kumda_dataset = datasets.ImageFolder(root='/content/gdrive/My Drive/Colab Notebooks/images',
                                           transform=data_transform)
#train & test 
train_size = int(0.8 * len(kumda_dataset))
test_size = len(kumda_dataset) - train_size

#splitting
train_dataset, test_dataset = torch.utils.data.random_split(kumda_dataset, [train_size, test_size])

trainloader = torch.utils.data.DataLoader(train_dataset , batch_size = 1, shuffle = True)
testloader = torch.utils.data.DataLoader(test_dataset , batch_size = 4, shuffle = False )

model=nn.Linear(784,1)
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(model.parameters(),lr=0.01)

num=10
for epoch in range(num):
  for i,(images,labels) in enumerate(trainloader):
    images=images.reshape(-1,28*28)
    output=model(images)
    loss=criterion(output,labels)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if(i+1%70==0):
        print("Epoch: {}/{}, \tIteration: {}/{}, \tLoss: {}".format(epoch + 1, num, i + 1,len(dataset_loader), loss.item()))

提前感谢您解决

您的线性层仅输出每个批次项目的单个值
CrossEntropyLoss
要求每个类有一个输出维度。改为

model=nn.Linear(784, 3)
因为你有三节课