Python Pytorch验证模型错误:预期输入批次大小(3)与目标批次大小(4)匹配

Python Pytorch验证模型错误:预期输入批次大小(3)与目标批次大小(4)匹配,python,neural-network,pytorch,Python,Neural Network,Pytorch,我正在Pytorch中构建一个NN,该NN应该可以跨102个类进行分类 我有以下验证函数: def validationmodel、testloader、标准: 测试损耗=0 精度=0 对于输入,testloader中的类: 输入=输入。至“cuda” 输出=模型输入 测试损耗+=标准输出,标签.项目 ps=火炬输出 相等=标签.数据==ps.maxdim=1[1] 精度+=相等.typetorch.FloatTensor.mean 返回测试\u损失、精度 培训呼叫验证代码: 纪元=3 打印间隔

我正在Pytorch中构建一个NN,该NN应该可以跨102个类进行分类

我有以下验证函数:

def validationmodel、testloader、标准: 测试损耗=0 精度=0 对于输入,testloader中的类: 输入=输入。至“cuda” 输出=模型输入 测试损耗+=标准输出,标签.项目 ps=火炬输出 相等=标签.数据==ps.maxdim=1[1] 精度+=相等.typetorch.FloatTensor.mean 返回测试\u损失、精度 培训呼叫验证代码:

纪元=3 打印间隔=40 步数=0 运行损耗=0 testloader=dataloaders['test'] 换成cuda 模型。到“cuda” 对于rangeepochs中的e: 运行损耗=0 对于ii,枚举数据加载器['train']中的输入和标签: 步数+=1 输入,标签=输入。至“cuda”,标签。至“cuda” 优化程序0\u梯度 向前和向后传球 输出=模型输入 损耗=标准输出、标签 落后 优化步骤 运行损失+=损失项目 如果步骤%print_every==0: 模型评估 带火炬,无梯度: 测试损失,精度=验证模型,测试加载程序,标准 打印时代:{}/{}。甲酸盐+1,时代, 培训损失:{.3f}。格式运行\u丢失/打印\u每, 测试丢失:{:.3f}。formattest\u丢失/lentestloader, 测试精度:{.3f}.formatAccurance/lentestloader 运行损耗=0 模型火车 我收到这个错误消息:

完全回溯:


我不明白这个错误是从哪里来的。事实上,没有验证代码,培训部分就可以完美地工作

在验证函数中

def validation(model, testloader, criterion):
    test_loss = 0
    accuracy = 0

    for inputs, classes in testloader:
        inputs = inputs.to('cuda')
        output = model.forward(inputs)
        test_loss += criterion(output, labels).item()

        ps = torch.exp(output)
        equality = (labels.data == ps.max(dim=1)[1])
        accuracy += equality.type(torch.FloatTensor).mean()

    return test_loss, accuracy

您在testloader上迭代,并将值传递给变量输入、类,但将标签传递给您的标准。

在验证函数中

def validation(model, testloader, criterion):
    test_loss = 0
    accuracy = 0

    for inputs, classes in testloader:
        inputs = inputs.to('cuda')
        output = model.forward(inputs)
        test_loss += criterion(output, labels).item()

        ps = torch.exp(output)
        equality = (labels.data == ps.max(dim=1)[1])
        accuracy += equality.type(torch.FloatTensor).mean()

    return test_loss, accuracy
您在testloader上进行迭代,并将值传递给变量输入、类,但将标签传递给您的标准

def validation(model, testloader, criterion):
    test_loss = 0
    accuracy = 0

    for inputs, classes in testloader:
        inputs = inputs.to('cuda')
        output = model.forward(inputs)
        test_loss += criterion(output, labels).item()

        ps = torch.exp(output)
        equality = (labels.data == ps.max(dim=1)[1])
        accuracy += equality.type(torch.FloatTensor).mean()

    return test_loss, accuracy