如何在训练后保存模型权重?
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('数据集样本数: {}'.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('结果: {0:.2f} ({1:.2f} MSE'.format(results.mean(), results.std()))
回答:
cross_val_score
会克隆提供的估计器,在训练折上拟合它们,并在测试折上评分。因此,实际上你的模型尚未被拟合。
所以首先你需要在数据上拟合模型:
model.fit(X, Y)
然后你可以使用底层的model
属性(它实际存储了keras模型)来调用save()
或save_weights()
方法。
model.model.save('saved_model.h5')
当你想要再次加载模型时,这样做:
from keras.models import load_model
# 按你的需要实例化模型(我们不会使用这个)
model2 = KerasRegressor(build_fn=model_build_fn, epochs=10, batch_size=10, verbose=1)
# 这里你将实际保存的模型加载到新变量中。
model2.model = load_model('hh.h5')
# 现在你可以使用它在新数据上进行预测(无需拟合model2,因为它使用了之前保存的模型)
model2.predict(X)