Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytorch访问数据批中的数据点_Python_Neural Network_Pytorch - Fatal编程技术网

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模式。