泡菜和numpy版本

发布于 2025-01-19 16:44:06 字数 373 浏览 2 评论 0原文

我有一些我无法重新训练的旧型号。他们很久以前就被腌制了。我可以使用Python 3.6和Numpy 1.14打开它们。但是,当我尝试使用numpy 1.18移动到Python 3.8时,我会在加载它们时得到一个segfault。

我尝试用Python 3.6的协议4倾倒它们,这无济于事。

储蓄:

with open('model.pkl', 'wb') as fid:
    pickle.dump(model, fid, protocol=4)

加载:

model = pickle.load(open('model.pkl', "rb"))

在这种情况下我可以做什么?

I have some old sklearn models which I can't retrain. They were pickled long time ago with unclear versions. I can open them with Python 3.6 and Numpy 1.14. But when I try to move to Python 3.8 with Numpy 1.18, I get a segfault on loading them.

I tried dumping them with protocol 4 from Python 3.6, it didn't help.

Saving:

with open('model.pkl', 'wb') as fid:
    pickle.dump(model, fid, protocol=4)

Loading:

model = pickle.load(open('model.pkl', "rb"))

Is there anything I can do in such situation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戈亓 2025-01-26 16:44:06

对我有用的是什么(特定于任务,但也许会帮助某人):

旧依赖性:

import joblib
model = pickle.load(open('model.pkl', "rb"), encoding="latin1")
joblib.dump(model.tree_.get_arrays()[0], "training_data.pkl")

较新的依赖性:

import joblib
from sklearn.neighbors import KernelDensity

data = joblib.load("training_data.pkl")
kde = KernelDensity(
      algorithm="auto",
      atol=0,
      bandwidth=0.5,
      breadth_first=True,
      kernel="gaussian",
      leaf_size=40,
      metric="euclidean",
      metric_params=None,
      rtol=0
).fit(data)

with open("new_model.pkl", "wb") as f:
    pickle.dump(kde, f)

What worked for me (very task-specific but maybe will help someone):

Old dependencies:

import joblib
model = pickle.load(open('model.pkl', "rb"), encoding="latin1")
joblib.dump(model.tree_.get_arrays()[0], "training_data.pkl")

Newer dependencies:

import joblib
from sklearn.neighbors import KernelDensity

data = joblib.load("training_data.pkl")
kde = KernelDensity(
      algorithm="auto",
      atol=0,
      bandwidth=0.5,
      breadth_first=True,
      kernel="gaussian",
      leaf_size=40,
      metric="euclidean",
      metric_params=None,
      rtol=0
).fit(data)

with open("new_model.pkl", "wb") as f:
    pickle.dump(kde, f)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文