【问题标题】:Cannot save scikit-learn model using joblib?无法使用 joblib 保存 scikit-learn 模型?
【发布时间】:2020-04-21 17:12:26
【问题描述】:

我有结合了 tensorflow 和 scikit-learn 的 Ensemble 模型。我想将这个 Ensemble 模型保存为一个盒子来输入数据并生成输出。我的代码如下

def model_base_LSTM(***):
   ***
model = model_base_LSTM(***)
ensem_model = BaggingRegressor(base_estimator=model, n_estimators=15)
ensem_model.fit(x_train, y_train)
bag_mod_pred = ensem_model.predict(x_test_bag)

from joblib import dump, load
dump(ensem_model, 'LSTM_Ensemble.joblib')

TypeError: can't pickle _thread._local objects

那么,如何解决这个问题?

【问题讨论】:

  • 您的逻辑中是否发生了某种多线程?
  • 你能解释清楚一点吗?
  • 在谷歌搜索错误时,我得到了reddit.com/r/learnpython/comments/bl2vze/…,它表示您正在尝试存储属于操作系统的threading.lock 对象。

标签: python tensorflow scikit-learn lstm


【解决方案1】:

您可以使用 Scikit-Learn 保存您的 TensorFlow(甚至 PyTorch)模型,但前提是您使用 Neuraxle 及其保存机制。

Neuraxle 是 Scikit-Learn 的扩展,使其与所有深度学习库更加兼容。

这个技巧是通过使用Neuraxle-TensorFlowNeuraxle-PyTorch 来执行的。

为什么会这样?

使用 Neuraxle-TensorFlow 或 Neuraxle-PyTorch 之一将为您提供一个保护程序,让您的事物能够正确序列化。您希望它被正确序列化,以确保 scikit-learn 和您的深度学习框架在保存或并行化事物等方面的兼容性。您可以阅读 Neuraxle 如何通过储户here 解决此问题。

代码示例

这是一个从 A 到 Z 的完整项目示例,其中TensorFlow is used with Neuraxle as if it was used with Scikit-Learn

这是另一个实际的例子,TensorFlow is used within a scikit-learn-like pipeline

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 2018-10-10
    • 2019-08-09
    • 2021-01-19
    • 2020-03-19
    • 1970-01-01
    • 2015-10-14
    • 2014-10-13
    相关资源
    最近更新 更多