我正在使用带有Tensorflow后端的Keras API来训练DL模型 . 我正在使用ModelCheckPoint监控验证准确性,如果有改进,只存储权重 . 在这个过程中,我最终将模型体系结构存储为JSON和每个改进的权重 . 我最终加载了最好的权重和模型架构来预测测试数据 . 这是我的代码:
filepath="weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]
history = model.fit_generator(train_generator,steps_per_epoch=nb_train_samples // batch_size, epochs=epochs, validation_data=validation_generator, callbacks=callbacks_list, validation_steps=nb_validation_samples // batch_size, verbose=1)
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
model.save('model_complete.h5')
我还试图用“model.save”保存整个模型,但是,这个保存的模型不存储最佳权重,而是在最后一个时期学到的权重,这绝对不是在我的情况下学到的最佳权重 . 有没有办法将架构和最佳权重存储到单个模型文件中?
1 回答
这已经是
ModelCheckpoint
的默认行为save_weights_only=False
. 如果您查看source,您将看到它已经调用model.save
如果您没有指定它仅保存权重 .