【问题标题】:How to load machine learning model in python 3.6 that is trained on python 3.5?如何在 python 3.6 中加载在 python 3.5 上训练的机器学习模型?
【发布时间】:2019-12-21 00:03:23
【问题描述】:

我已经在 Python 3.5 上训练了一个机器学习模型,现在我切换到使用 Python 3.6 的 Google Colab,当我尝试加载我在 Python 3.5 上训练的模型时,它给出这个错误:

SystemError: unknown opcode.

google了一下,发现这个错误是因为环境变化造成的,然后我交叉检查了我的python版本,两个python版本都不一样。如何在 Python 3.6 上加载我的模型?

【问题讨论】:

  • 您可以尝试使用 python 3.5 将模型加载到内存中,然后使用 python 3.6 作为解释器保存模型。
  • 您究竟是如何保存和加载模型的?如果可能,请添加代码。
  • 获得python 3.5版本的一种方法是连接到local runtime

标签: python python-3.x machine-learning keras deep-learning


【解决方案1】:

我遇到了和你一样的问题。我在 python 3.5 上的 GCP 上训练了我的模型,并将其移至 colab 以继续评估,即 python 3.6。

我所做的是从代码中重新实例化确切的模型,然后调用 load_weights:

model = create_my_model()

model.load_weights('my_model_trained_with_py_35.h5')

model.save('my_model_py36.h5')

就我而言,除了 Lambda 之外,我没有很多自定义代码:

def abs_diff(x):
  return tf.abs(x[0] - x[1])

由于您的模型可能更复杂,这可能会或可能不会起作用,但值得一试,尤其是。如果重新培训太贵。像往常一样,使用相同的数据评估模型并确保没有任何异常。

【讨论】:

    【解决方案2】:

    你不应该。

    即使您让它在没有错误/警告的情况下运行,也可能会发生细微的变化,从而改变模型的行为/性能。

    您应该在 Python 3.6 上重新训练模型,或者为您的模型创建一个运行 Python 3.5 的虚拟环境,以确保其按预期运行。还要始终确保实际的库(例如 keras...)具有相同的版本。

    【讨论】:

    • 当您说性能时,您是指执行速度,还是指标性能?另外,如果你别无选择再训练,只用 load_weights(...) 可以吗?
    • 两者。不确定 load_weights,因为我不知道您使用的是哪种算法。您可以尝试并希望获得最好的结果,只要所有库版本都相同,您可能会很好。
    • 另外,也许要确保从 3.5 到 3.6 的更改实际上是问题所在,而不是其他问题,例如具有更有限的命令集的不同 Python 实现。
    • 我已经读到加载权重可能比从保存的 .h5 加载整个序列化模型更安全、更好的“实践”,尤其是。如果您可以控制 ML 开发的每个阶段。如果我没记错的话,这是 pytorch 的唯一方法(大约一年前使用过)。
    猜你喜欢
    • 2020-01-30
    • 2020-12-03
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多