【问题标题】:pytorch: can't load CNN model and do prediction TypeError: 'collections.OrderedDict' object is not callablepytorch:无法加载 CNN 模型并进行预测 TypeError:“collections.OrderedDict”对象不可调用
【发布时间】:2018-07-03 07:55:00
【问题描述】:

我使用 MNIST 数据集训练了一个 CNN 模型,现在想要预测图像的分类,其中包含数字 3。

但是当我尝试使用这个 CNN 进行预测时,pytorch 给了我这个错误:

TypeError: 'collections.OrderedDict' object is not callable

这是我写的:

cnn = torch.load("/usr/prakt/w153/Desktop/score_detector.pkl")
img = scipy.ndimage.imread("/usr/prakt/w153/Desktop/resize_num_three.png")
test_x = Variable(torch.unsqueeze(torch.FloatTensor(img), dim=1), volatile=True).type(torch.FloatTensor).cuda()
test_output, last_layer = cnn(test_x)
pred = torch.max(test_output, 1)[1].cuda().data.squeeze()
print(pred)

这里有一些解释: img 是要预测的图像,大小为 28*28 score_detector.pkl 是训练好的 CNN 模型

任何帮助将不胜感激!

【问题讨论】:

  • 我遇到了类似的问题,我收到了TypeError: 'dict' object is not callable,我什至没有尝试使用 GPU。

标签: python tensorflow pytorch


【解决方案1】:

确实,您正在加载 state_dict 而不是模型本身。

保存模型如下:

torch.save(model.state_dict(), 'model_state.pth')

而要加载模型状态,您首先需要初始化模型,然后加载状态

model = Model()
model.load_state_dict(torch.load('model_state.pth'))

如果您在 GPU 上训练了模型,但希望将模型加载到没有 CUDA 的笔记本电脑上,那么您需要再添加一个参数

model.load_state_dict(torch.load('model_state.pth', map_location='cpu'))

【讨论】:

  • 请问,你的第二种方法如何定义Model()
  • @ahbon 看看这个MNIST example Net 类是定义模型的地方,然后在第 105 行初始化如下model = Net().to(device)
【解决方案2】:

我很确定 score_detector.pkl 实际上是一个 state_dict 而不是模型本身。您需要先实例化模型,然后加载 state_dict,因此您的第一行应替换为以下内容:

cnn = MyModel()
cnn.load_state_dict("/usr/prakt/w153/Desktop/score_detector.pkl")

然后其余的应该可以工作。 请参阅this link 了解更多信息。

【讨论】:

  • 我想补充一点,如果您保存了一个在 GPU 上的模型,请确保您的当前模型在 GPU 上,并在加载状态之前使用“myModel.to(device)”或等效项.
猜你喜欢
  • 2022-11-30
  • 2021-10-24
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2021-06-24
  • 2018-03-02
相关资源
最近更新 更多