pytorch图像评分集和评估结果

pytorch图像评分集和评估结果,pytorch,scoring,Pytorch,Scoring,在Pytork中,使用GPU(cuda)需要对给定训练NN的一组图像进行评分。 下面的代码旨在对一组变换后的图像逐一打分 model.to('cuda') model.eval() for ii, (inputs, classes) in enumerate(dataloaders['test']): inputs, classes = inputs, classes results = model.forward(inputs) ps = torch.exp(r

在Pytork中,使用GPU(cuda)需要对给定训练NN的一组图像进行评分。 下面的代码旨在对一组变换后的图像逐一打分

model.to('cuda')
model.eval()

for ii, (inputs, classes) in enumerate(dataloaders['test']):
     inputs, classes = inputs, classes
     results = model.forward(inputs)
     ps = torch.exp(results)
错误堆栈:

RuntimeError                              Traceback (most recent call last)
<ipython-input-24-948390e2b25a> in <module>()
      5 for ii, (inputs, classes) in enumerate(dataloaders['test']):
      6      inputs, classes = inputs, classes
----> 7      results = model(inputs)
      8      ps = torch.exp(results)

/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    489             result = self._slow_forward(*input, **kwargs)
    490         else:
--> 491             result = self.forward(*input, **kwargs)
    492         for hook in self._forward_hooks.values():
    493             hook_result = hook(self, input, result)

/opt/conda/lib/python3.6/site-packages/torchvision-0.2.1-py3.6.egg/torchvision/models/vgg.py in forward(self, x)
     40 
     41     def forward(self, x):
---> 42         x = self.features(x)
     43         x = x.view(x.size(0), -1)
     44         x = self.classifier(x)

/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    489             result = self._slow_forward(*input, **kwargs)
    490         else:
--> 491             result = self.forward(*input, **kwargs)
    492         for hook in self._forward_hooks.values():
    493             hook_result = hook(self, input, result)

/opt/conda/lib/python3.6/site-packages/torch/nn/modules/container.py in forward(self, input)
     89     def forward(self, input):
     90         for module in self._modules.values():
---> 91             input = module(input)
     92         return input
     93 

/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    489             result = self._slow_forward(*input, **kwargs)
    490         else:
--> 491             result = self.forward(*input, **kwargs)
    492         for hook in self._forward_hooks.values():
    493             hook_result = hook(self, input, result)

/opt/conda/lib/python3.6/site-packages/torch/nn/modules/conv.py in forward(self, input)
    299     def forward(self, input):
    300         return F.conv2d(input, self.weight, self.bias, self.stride,
--> 301                         self.padding, self.dilation, self.groups)
    302 
    303 
运行时错误回溯(最近一次调用)
在()
5对于枚举(数据加载器['test'])中的ii(输入,类):
6输入,类别=输入,类别
---->7结果=模型(输入)
8 ps=火炬试验(结果)
/opt/conda/lib/python3.6/site-packages/torch/nn/modules/modules.py in____________(self,*input,**kwargs)
489结果=self.\u slow\u forward(*输入,**kwargs)
490其他:
-->491结果=自我转发(*输入,**kwargs)
492用于钩住自身。\u向前\u钩住.values():
493钩子结果=钩子(自身、输入、结果)
/opt/conda/lib/python3.6/site-packages/torchvision-0.2.1-py3.6.egg/torchvision/models/vgg.py前进(self,x)
40
41 def前进档(自身,x):
--->42 x=自身特征(x)
43 x=x.view(x.size(0),-1)
44 x=自分类器(x)
/opt/conda/lib/python3.6/site-packages/torch/nn/modules/modules.py in____________(self,*input,**kwargs)
489结果=self.\u slow\u forward(*输入,**kwargs)
490其他:
-->491结果=自我转发(*输入,**kwargs)
492用于钩住自身。\u向前\u钩住.values():
493钩子结果=钩子(自身、输入、结果)
/前进中的opt/conda/lib/python3.6/site-packages/torch/nn/modules/container.py(自我,输入)
89 def前进档(自身,输入):
90表示自组中的模块。\u modules.values():
--->91输入=模块(输入)
92返回输入
93
/opt/conda/lib/python3.6/site-packages/torch/nn/modules/modules.py in____________(self,*input,**kwargs)
489结果=self.\u slow\u forward(*输入,**kwargs)
490其他:
-->491结果=自我转发(*输入,**kwargs)
492用于钩住自身。\u向前\u钩住.values():
493钩子结果=钩子(自身、输入、结果)
/前进中的opt/conda/lib/python3.6/site-packages/torch/nn/modules/conv.py(自我,输入)
299 def前进档(自身,输入):
300返回F.conv2d(输入、自重、自偏倚、自步幅、,
-->301自填充、自膨胀、自组)
302
303
RuntimeError:应为torch.FloatTensor类型的对象,但为参数#2“weight”找到了torch.cuda.FloatTensor类型


在GPU(cuda)上制作的模型。

这解决了问题并提供了准确率

model.to('cuda')
model.eval()
accuracy = 0

for ii, (inputs, classes) in enumerate(dataloaders['test']):
        inputs, classes = inputs.to('cuda'), classes.to('cuda')
        # Forward and backward passes
        with torch.no_grad():
            output = model.forward(inputs)
        ps = torch.exp(output)
        equality = (classes.data == ps.max(dim=1)[1])
        accuracy += equality.type(torch.FloatTensor).mean()

accuracy = accuracy/len(dataloaders['test'])
print(accuracy)

为这个答案添加一些信息:将数据移动到GPU也很重要,这只发生在
inputs,classes=inputs.To('cuda')、classes.To('cuda')
中。答案的其余部分只是细节。