Pickle 和 Numpy 版本
Pickle and Numpy versions
我有一些无法重新训练的旧 sklearn 模型。他们很久以前就被腌制过,版本不明确。我可以用 Python 3.6 和 Numpy 1.14 打开它们。但是当我尝试使用 Numpy 1.18 迁移到 Python 3.8 时,我在加载它们时遇到段错误。
我尝试使用 Python 3.6 中的协议 4 转储它们,但没有帮助。
节省:
with open('model.pkl', 'wb') as fid:
pickle.dump(model, fid, protocol=4)
正在加载:
model = pickle.load(open('model.pkl', "rb"))
遇到这种情况我有什么办法吗?
对我有用的(非常task-specific但也许会对某人有所帮助):
旧依赖项:
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)
我有一些无法重新训练的旧 sklearn 模型。他们很久以前就被腌制过,版本不明确。我可以用 Python 3.6 和 Numpy 1.14 打开它们。但是当我尝试使用 Numpy 1.18 迁移到 Python 3.8 时,我在加载它们时遇到段错误。
我尝试使用 Python 3.6 中的协议 4 转储它们,但没有帮助。
节省:
with open('model.pkl', 'wb') as fid:
pickle.dump(model, fid, protocol=4)
正在加载:
model = pickle.load(open('model.pkl', "rb"))
遇到这种情况我有什么办法吗?
对我有用的(非常task-specific但也许会对某人有所帮助):
旧依赖项:
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)