Pytorch模型重量类型转换

Pytorch模型重量类型转换,pytorch,Pytorch,我试图对从文件加载的FlowNet2-C模型进行推断。 但是,我遇到了一些数据类型问题。我如何解决它 $python main.py Initializing Datasets [0.000s] Loading checkpoint '/notebooks/data/model/FlowNet2-C_checkpoint.pth.tar' [1.293s] Loaded checkpoint '/notebooks/data/model/FlowNet2-C_checkpoint

我试图对从文件加载的FlowNet2-C模型进行推断。 但是,我遇到了一些数据类型问题。我如何解决它

$python main.py

Initializing Datasets
  [0.000s] Loading checkpoint '/notebooks/data/model/FlowNet2-C_checkpoint.pth.tar'
  [1.293s] Loaded checkpoint '/notebooks/data/model/FlowNet2-C_checkpoint.pth.tar' (at epoch 0)
(1L, 6L, 384L, 512L)
<class 'torch.autograd.variable.Variable'>
  [1.642s] Operation failed


Traceback (most recent call last):
  File "main.py", line 102, in <module>
    main()
  File "main.py", line 98, in main
    summary(input_size, model)
  File "main.py", line 61, in summary
    model(x)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 357, in __call__
    result = self.forward(*input, **kwargs)
  File "/notebooks/data/vinet/FlowNetC.py", line 75, in forward
    out_conv1a = self.conv1(x1)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 357, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/container.py", line 67, in forward
    input = module(input)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 357, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/conv.py", line 282, in forward
    self.padding, self.dilation, self.groups)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/functional.py", line 90, in conv2d
    return f(input, weight, bias)
RuntimeError: Input type (CUDAFloatTensor) and weight type (CPUFloatTensor) should be the same
初始化数据集
[0.000s]加载检查点“/Notebook/data/model/FlowNet2-C_checkpoint.pth.tar”
[1.293s]加载的检查点'/Notebook/data/model/FlowNet2-C_checkpoint.pth.tar'(在第0纪元)
(1升、6升、384升、512升)
[1.642s]操作失败
回溯(最近一次呼叫最后一次):
文件“main.py”,第102行,在
main()
文件“main.py”,第98行,在main中
摘要(输入尺寸、型号)
文件“main.py”,第61行,汇总
型号(x)
文件“/usr/local/lib/python2.7/dist packages/torch/nn/modules/module.py”,第357行,在调用中__
结果=自我转发(*输入,**kwargs)
文件“/notebes/data/vinet/FlowNetC.py”,第75行,向前
out_conv1a=self.conv1(x1)
文件“/usr/local/lib/python2.7/dist packages/torch/nn/modules/module.py”,第357行,在调用中__
结果=自我转发(*输入,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/torch/nn/modules/container.py”,第67行,向前
输入=模块(输入)
文件“/usr/local/lib/python2.7/dist packages/torch/nn/modules/module.py”,第357行,在调用中__
结果=自我转发(*输入,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/torch/nn/modules/conv.py”,第282行,向前
自填充、自膨胀、自组)
conv2d中的文件“/usr/local/lib/python2.7/dist-packages/torch/nn/functional.py”,第90行
返回f(输入、重量、偏差)
运行时错误:输入类型(CUDAFloatTensor)和权重类型(CPUFloatTensor)应相同

这可能是因为您的
模型和输入到模型的
x
具有不同的数据类型。似乎模型参数已移动到GPU,但您的输入
x
位于GPU上


您可以尝试在第94行之后使用
model.cuda()
,这将把模型放在GPU上。然后错误就会消失。

它就像一个符咒!将GPU设置为th.load和
model.cuda()
之间有什么区别?我通常初始化模型,然后加载状态dict,然后从状态dict初始化模型,并将模型移动到GPU。我认为这是进行模型加载的标准方法。链接给出了404错误