如何将神经网络保存在sklearn模型中?我试着将它保存为h5文件,就像在keras中一样,但是得到了以下错误"Pipeline object has no attribute save“。我也尝试过保存在一个pickle文件中,就像在sklearn中一样,但是得到了下面的错误,无法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)
发布于 2020-09-22 12:54:32
基于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']
基于this implementation source,训练好的Keras模型应该是回归器上的model
属性:
model = kreg.model
(我建议将管道对象重命名为pipeline
,以避免混淆。)
https://stackoverflow.com/questions/64009641
复制