python - 在 Keras 中保存最佳权重和模型
问题描述
我正在使用带有 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”保存整个模型,但是,这个保存的模型存储的不是最佳权重,而是在最后一个时期学到的权重,这绝对不是我的案例中学到的最佳权重。有没有办法将架构和最佳权重存储到单个模型文件中?
解决方案
这已经是ModelCheckpoint
as的默认行为save_weights_only=False
。如果您查看源代码model.save
,如果您没有指定它仅保存权重,您会看到它已经调用。
推荐阅读
- flutter - 如何通过在颤动中单击外部来关闭覆盖
- matlab - 插入 2x2x5 数组以获得新的 2x2x9 数组
- vue.js - Vee Validate 3.0 - 未在实例上定义“必需”属性或方法,但在渲染期间引用
- apple-watch - 'NSHealthUpdateUsageDescription 必须在应用的 Info.plist 中设置
- python - 为什么在 python 中不可能有一个对象方法返回一个元组作为新对象 __init__ 方法中的参数?
- python - python - aggregate data in nested list structure
- ruby-on-rails - 为什么 rbenv 在 Mac OS Catalina 上不起作用
- c# - How to stop program crashing on 19th run?
- delphi - Firemonkey 风格的 TMemo 没有获得焦点
- python - Skeletonization with Thinning and Hit-or-miss implementation never stops