python - 如何保存包装在 sklearn 中的 keras 神经网络?
问题描述
如何保存包裹在 sklearn 模型中的神经网络?我试图将它保存为 keras 中的 h5 文件,但得到但得到以下错误“管道对象没有属性保存”。还尝试像在 sklearn 中一样保存在 pickle 文件中,但出现以下错误无法 pickle '_thread.RLock' 对象。
#Relevant Code
def create_model():
model = Sequential()
model.add(Dense(40, input_shape=input_shape,activation="relu"))
model.add(BatchNormalization())
model.add(Dense(40,activation="relu"))
model.add(BatchNormalization())
model.add(Dense(40,activation="relu"))
model.add(Dense(1))
model.compile(loss='mean_squared_error',optimizer='Adam')
return model
Estimator = KerasRegressor(build_fn=create_model,epochs=60,callbacks=[Early_stopping],validation_data=(X_test,y_test))
model = make_pipeline(StandardScaler(), Estimator)
input_shape=X1.shape[1:]
model.fit(X_train,y_train)
with open('Neural_network.pickle','wb') as file:
pickle.dump(model,file)
解决方案
基于以下输出vars(model)
:
{'steps': [('standardscaler', StandardScaler()), ('kerasregressor', <tensorflow.python.keras.wrappers.scikit_learn.KerasRegressor object at 0x000002570ECF6D60>)], 'memory': None, 'verbose': False}
您可以KerasRegressor
从管道访问对象
kreg = model.steps['kerasregressor']
并且基于这个实现源,经过训练的 Keras 模型应该是model
回归量的属性:
model = kreg.model
(我建议重命名管道对象pipeline
以避免混淆。)
推荐阅读
- node.js - 角度前端没有从快速后端获得对 http 请求的适当响应
- r - 计算每列的频率并计算整个矩阵的频率
- aws-lambda - Node, Lambda - 在 Windows 上构建,在 Linux 上部署
- android - 在从基本活动扩展的布局中无法滚动 RecyclerView
- r - 尝试在 R 中运行 lars 回归时,“rep(1, n) 中的错误:无效的‘次’参数”
- reactjs - 为什么我的 React 应用程序将外部 URL 附加到 http://localhost:/
而不仅仅是 URL 本身? - c++ - 将 txt 文件中每一行的 4 个值存储到一个对象中 - C++
- github - 通过命令行推送未找到现有的远程 github 存储库
- c++ - QML/C++ 为 QString 中的每 8 个字符着色
- android - 适用于较旧 Android 设备的 ARCore