Python Pytorch访问数据批中的数据点
我试图在数据批处理中的选定数据点上运行我的模型,但该模型生成的输出与直接在批处理上运行完全不同 下面是一个例子:Python Pytorch访问数据批中的数据点,python,neural-network,pytorch,Python,Neural Network,Pytorch,我试图在数据批处理中的选定数据点上运行我的模型,但该模型生成的输出与直接在批处理上运行完全不同 下面是一个例子: 我有一个数据批(firstData),形状torch.Size([128,1,28,28]),这意味着它包含128个数据点。 firstData由以下人员检索: 枚举(列装载机)中的(数据)的 firstData=数据 打破 train\u loader是MNIST数据集上的torch.utils.data.DataLoader 然后我跑: 带火炬的。无梯度() 打印(cnn(fi
我有一个数据批(
firstData
),形状torch.Size([128,1,28,28])
,这意味着它包含128个数据点。firstData
由以下人员检索:
枚举(列装载机)中的(数据)的
firstData=数据
打破
train\u loader
是MNIST数据集上的torch.utils.data.DataLoader
然后我跑:
带火炬的。无梯度()
打印(cnn(firstData.cuda())[0:2])#批量运行并获得前两个输出
它输出:
tensor([[-0.5045, -0.8611, -1.0237, -2.2146, 1.6829, -0.1202, 8.2230, -2.9030,
-0.6736, -1.6260],
[-1.6367, -0.0683, 2.3553, -2.8480, 8.0057, -2.7570, -0.7046, -1.3720,
-1.1558, 0.2683]], device='cuda:0')
tensor([[ 0.8256, -1.2180, -2.2164, -0.3754, -1.9170, 2.4913, 4.2119, -2.6611,
1.1260, -0.2956],
[-1.1582, 0.8964, 3.2793, -0.4405, 2.4863, -2.9732, -3.5990, 1.8273,
-0.6883, 0.3878]], device='cuda:0')
当我跑步时:
带火炬的。无梯度()
打印(cnn(firstData.cuda()[0:2])#选择前两个数据点并运行模型
它输出:
tensor([[-0.5045, -0.8611, -1.0237, -2.2146, 1.6829, -0.1202, 8.2230, -2.9030,
-0.6736, -1.6260],
[-1.6367, -0.0683, 2.3553, -2.8480, 8.0057, -2.7570, -0.7046, -1.3720,
-1.1558, 0.2683]], device='cuda:0')
tensor([[ 0.8256, -1.2180, -2.2164, -0.3754, -1.9170, 2.4913, 4.2119, -2.6611,
1.1260, -0.2956],
[-1.1582, 0.8964, 3.2793, -0.4405, 2.4863, -2.9732, -3.5990, 1.8273,
-0.6883, 0.3878]], device='cuda:0')
此外,cnn
是一种类似resnet18的结构,已经在MNIST数据集上训练到0.99的精度。我还制作了cnndeterministic,在相同的输入下,它总是返回相同的结果
我是Pytorch的新手,我想这是因为我以错误的方式访问批处理数据。有谁能提出一些建议来解决这个问题吗
更新谢谢@kHarshit!调用cnn.eval()解决了我的问题 在PyTorch教程中:
请记住,在运行推理之前,必须调用
model.eval()
将退出和批处理规范化层设置为评估模式。否则将产生不一致的推理结果。如果要恢复培训,请调用model.train()
以确保这些层处于培训模式
这是有意义的,因为我的cnn
包含BatchNorm2d
层
可以找到官方API您是否设置了
cnn.eval()
?不,我没有将数据加载程序中的ITS shuffle设置为true?您需要将模型设置为eval模式。您是否设置了cnn.eval()
?不,我没有将数据加载程序中的ITS shuffle设置为true?您需要将模型设置为eval模式。