Python 如何保存包装在sklearn中的keras神经网络?

Python 如何保存包装在sklearn中的keras神经网络?,python,keras,scikit-learn,Python,Keras,Scikit Learn,如何保存sklearn模型中的神经网络?。我曾尝试将其保存为类似于keras中的h5文件,但得到了以下错误“Pipeline对象没有属性保存”。还尝试保存在类似sklearn的pickle文件中,但获取以下错误无法pickle“\u thread.RLock”对象 #Relevant Code def create_model(): model = Sequential() model.add(Dense(40, input_shape=input_shape,activatio

如何保存sklearn模型中的神经网络?。我曾尝试将其保存为类似于keras中的h5文件,但得到了以下错误“Pipeline对象没有属性保存”。还尝试保存在类似sklearn的pickle文件中,但获取以下错误无法pickle“\u 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)

基于
变量(模型)
的输出:

{'steps':[('standardscaler',standardscaler()),('kerasregressor',)],'memory':无,'verbose':假}

您可以使用从管道访问
KerasRegressor
对象

kreg = model.steps['kerasregressor']
基于经过训练的Keras模型,回归器上的
模型
属性应为:

model = kreg.model

(我建议将管道对象重命名为
pipeline
,以避免混淆。)

基于
vars(model)
的输出:

{'steps':[('standardscaler',standardscaler()),('kerasregressor',)],'memory':无,'verbose':假}

您可以使用从管道访问
KerasRegressor
对象

kreg = model.steps['kerasregressor']
基于经过训练的Keras模型,回归器上的
模型
属性应为:

model = kreg.model

(我建议将管道对象重命名为
pipeline
,以避免混淆。)

您查看过管道内部吗<代码>打印(vars(model))
?是的,它只打印管道中使用的步骤以及对象所在的位置。{'steps':[('standardscaler',standardscaler()),('kerasreservator',)],'memory':None,'verbose':False}这正好解决了您的问题。您是否窥视了管道内部<代码>打印(vars(model))
?是的,它只打印管道中使用的步骤以及对象所在的位置。{'steps':[('standardscaler',standardscaler(),('kerasregressor',)],'memory':None,'verbose':False}这正好解决了您的问题。