在 Keras 中保存最佳权重和模型

shi*_*iva 3 python deep-learning keras tensorflow

我正在使用带有 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')
Run Code Online (Sandbox Code Playgroud)

我还尝试使用“model.save”保存整个模型,但是,这个保存的模型存储的不是最好的权重,而是在最后一个时期学习的权重,这绝对不是我学习的最佳权重。有没有办法将架构和最佳权重存储到单个模型文件中?

nur*_*ric 5

这已经是ModelCheckpointas的默认行为save_weights_only=False。如果您查看源代码model.save如果您没有指定它仅保存权重,您会看到它已经调用了。