【问题标题】:torch.load(ml_model) in new class I receive an AttributeError: Can't get attribute 'ResNet1D' on <module '__main__'>新类中的 torch.load(ml_model) 我收到 AttributeError: Can't get attribute 'ResNet1D' on <module '__main__'>
【发布时间】:2022-04-06 20:36:23
【问题描述】:

我已经使用 Google Colab 在名为 model_prep.py 的文件中成功训练了卷积神经网络模型。该模型获得 92% 的准确率。现在我对使用 pyTorch 保存模型的模型感到满意。

torch.save(model, '/content/drive/MyDrive/myModel.pt')

我对此的理解是,一旦模型经过全面训练,我就可以使用 pyTorch 保存经过训练的模型,然后将其加载到未来的项目中以预测新数据。因此我创建了一个单独的 test.py 文件,我在其中加载了训练好的模型,

model = torch.load('/content/drive/MyDrive/myModel.pt')
model.eval()

但在新的 test.py 文件中,我收到一条错误消息

AttributeError: Can't get attribute 'ResNet1D' on <module '__main__'>

虽然在创建训练模型 (model_prep.py) 的同一笔记本中加载模型时不会发生此错误。此错误仅在将模型加载到没有模型架构的单独笔记本中时发生。我该如何解决这个问题?我想将经过训练的模型加载到一个新的单独文件中以对新数据执行。有人可以提出解决方案吗?

将来,我想使用 tkinter 创建一个 GUI,并部署经过训练的模型,以使用 tkinter 文件中的新数据检查预测。这可能吗?

【问题讨论】:

  • 基本上模型保存依赖于保存时的全局变量,如ResNet1D。所以加载也需要相同的全局变量具有相同的值。尝试以与训练模型时相同的方式定义 ResNet1D。另外请从问题中删除tkinter 标签,因为问题不是由tkinter 直接引起的。

标签: python machine-learning pytorch google-colaboratory


【解决方案1】:
  1. 即使我也面临同样的错误。这想说的是通过调用类创建模型的实例,然后执行torch.load()
  2. 如果通过 PyTorch 访问 Saving and Loading Models 上的博客之一,并且在 load 部分中,您可以清楚地看到 # Model class must be defined somewhere 这一行。
  3. 因此我建议,在您的 test.py 文件中尝试像在 train.py 中所做的那样定义模型类(猜测这是您创建模型的文件名),然后按如下所示加载。李>
model = ModelClass()
model = torch.load(PATH, , map_location=torch.device('cpu')) #<--- if current device is 'CPU'
model.eval() #<---- To prevent it from going to retraining mode.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2022-08-13
    • 2019-08-24
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多