Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将内置keras Regressionor的scikit learn pipline保存到磁盘?_Python_Machine Learning_Scikit Learn_Keras_Joblib - Fatal编程技术网

Python 如何将内置keras Regressionor的scikit learn pipline保存到磁盘?

Python 如何将内置keras Regressionor的scikit learn pipline保存到磁盘?,python,machine-learning,scikit-learn,keras,joblib,Python,Machine Learning,Scikit Learn,Keras,Joblib,我有一个scikit学习管线,里面有KerasRegressionor: estimators = [ ('standardize', StandardScaler()), ('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=5, batch_size=1000, verbose=1)) ] pipeline = Pipeline(estimators) 在训练管道之后,我尝试使用joblib保存到磁盘 jo

我有一个scikit学习管线,里面有KerasRegressionor:

estimators = [
    ('standardize', StandardScaler()),
    ('mlp', KerasRegressor(build_fn=baseline_model, nb_epoch=5, batch_size=1000, verbose=1))
    ]
pipeline = Pipeline(estimators)
在训练管道之后,我尝试使用joblib保存到磁盘

joblib.dump(pipeline, filename , compress=9)
但我得到了一个错误:

运行时错误:超过最大递归深度


如何将管道保存到磁盘?

我遇到了同样的问题,因为没有直接的方法可以做到这一点。这是一个对我有用的技巧。我将管道保存到两个文件中。第一个文件存储sklearn管道的pickle对象,第二个文件用于存储Keras模型:

...
from keras.models import load_model
from sklearn.externals import joblib

...

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('estimator', KerasRegressor(build_model))
])

pipeline.fit(X_train, y_train)

# Save the Keras model first:
pipeline.named_steps['estimator'].model.save('keras_model.h5')

# This hack allows us to save the sklearn pipeline:
pipeline.named_steps['estimator'].model = None

# Finally, save the pipeline:
joblib.dump(pipeline, 'sklearn_pipeline.pkl')

del pipeline
下面是如何加载模型:

# Load the pipeline first:
pipeline = joblib.load('sklearn_pipeline.pkl')

# Then, load the Keras model:
pipeline.named_steps['estimator'].model = load_model('keras_model.h5')

y_pred = pipeline.predict(X_test)

Keras与现成的pickle不兼容。如果愿意,您可以修复它

您还可以使用SciKeras库,该库为您提供此功能,是
KerasClassifier
的替代品:


披露:我是《SciKeras》和《PR》的作者。

你可以看看迪尔。也许你应该简单地增加最大递归深度的值就行了:我用KerasClassifier尝试了这种方法,结果出现错误:“KerasClassifier”对象没有属性“save”。您确定您没有实际执行pipeline.named_steps['estimator'].model.model.save('keras_model.h5')?然而,在本例中,似乎必须再次将KerasClassifier对象环绕加载的模型。是的,我绝对肯定。再次检查一下,它的工作方式很有魅力:)(python 3.5.2、keras 2.0.8、sklearn 0.19.1)非常感谢。工作得很有魅力!这很简单,但没人能理解。只需将管道的步骤(Keras步骤除外)保存为pickle/joblib,并将Keras保存为model.save。回答得很好。这真是天赐良机。非常感谢你!!