如何保存 Keras 回归模型?
Posted
技术标签:
【中文标题】如何保存 Keras 回归模型?【英文标题】:How To Save Keras Regressor Model? 【发布时间】:2018-12-14 13:18:52 【问题描述】:如何在训练后保存模型权重?
Keras 提供:
model.save('weights.h5')`
模型对象由build_fn属性函数初始化,如何保存?
def model():
model = Sequential()
model.add(Dense(10, activation='relu', input_dim=5))
model.add(Dense(5, activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
if __name__ == '__main__':
`
X, Y = process_data()
print('Dataset Samples: '.format(len(Y)))
model = KerasRegressor(build_fn=model,
epochs=10,
batch_size=10,
verbose=1)
kfold = KFold(n_splits=2, random_state=seed)
results = cross_val_score(model, X, Y, cv=kfold)
print('Results: 0.2f (1.2f MSE'.format(results.mean(), results.std()))
【问题讨论】:
【参考方案1】:cross_val_score
克隆提供的估计器,将它们拟合到训练折叠,测试折叠得分。所以基本上,你的实际模型还没有安装。
所以首先你需要在数据上拟合模型:
model.fit(X, Y)
然后你可以使用底层的model
属性(它实际上存储了keras 模型)来调用save()
或save_weights()
方法。
model.model.save('saved_model.h5')
现在,当您想再次加载模型时,请执行以下操作:
from keras.models import load_model
# Instantiate the model as you please (we are not going to use this)
model2 = KerasRegressor(build_fn=model_build_fn, epochs=10, batch_size=10, verbose=1)
# This is where you load the actual saved model into new variable.
model2.model = load_model('hh.h5')
# Now you can use this to predict on new data (without fitting model2, because it uses the older saved model)
model2.predict(X)
【讨论】:
好的,感谢您的精彩回答并解决问题! 这很好用,谢谢。但是我仍然不明白为什么KerasRegressor
强制您重新创建一个新实例并将其初始化为先前训练的模型(即使不使用它,从概念上讲它违反了保存模型以持久化它的概念) .
@gented 因为KerasRegressor
是由model
表示的实际keras
模型的sklearn 兼容包装器,并且模组并没有将该功能添加到包装器中。
请注意:这也适用于tf.keras.wrappers.scikit_learn.KerasClassifier
以上是关于如何保存 Keras 回归模型?的主要内容,如果未能解决你的问题,请参考以下文章