ModelCheckpoint详解

问题描述

使用keras搭建模型,训练时验证集上val_acc达到1了,但在测试数据集上面模型还没有完全收敛。由于在ModelCheckpoint的参数设置时设置了仅保留最佳模型,导致无法保存最新的更好的模型。

ModelCheckpoint

  • 函数原型

    keras.callbacks.ModelCheckpoint(filepath, 
    								monitor='val_loss', 
    								verbose=0, 
    								save_best_only=False, 
    								save_weights_only=False, 
    								mode='auto', 
    								period=1)
    
  • 作用

    该回调函数将在每个epoch后保存模型到filepath

  • 参数

    filename:字符串,保存模型的路径,filepath可以是格式化的字符串,里面的占位符将会被epoch值和传入on_epoch_end的logs关键字所填入。
    例如:
    filepath = "weights_{epoch:03d}-{val_loss:.4f}.h5"
    则会生成对应epoch和验证集loss的多个文件。

    monitor:需要监视的值,通常为:val_acc 或 val_loss 或 acc 或 loss

    verbose:信息展示模式,0或1。为1表示输出epoch模型保存信息,默认为0表示不输出该信息,信息形如:
    Epoch 00001: val_acc improved from -inf to 0.49240, saving model to /xxx/checkpoint/model_001-0.3902.h5

    save_best_only:当设置为True时,将只保存在验证集上性能最好的模型

    mode:‘auto’,‘min’,‘max’之一,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,模式应为max,当检测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断。

    save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)

    period:CheckPoint之间的间隔的epoch数

EarlyStopping

  • 函数原型

    keras.callbacks.EarlyStopping(monitor='val_loss', 
    								patience=0, 
    								verbose=0, 
    								mode='auto')
    

    当监测值不再改善时,该回调函数将中止训练

  • 参数

    monitor:需要监视的量,通常为:val_acc 或 val_loss 或 acc 或 loss

    patience:当early stop被激活(如发现loss相比上patience个epoch训练没有下降),则经过patience个epoch后停止训练。

    verbose:信息展示模式

    mode:‘auto’,‘min’,‘max’之一,在min模式下,如果检测值停止下降则中止训练。在max模式下,当检测值不再上升则停止训练。

问题解决

  • 步骤
    1、设置 ModelCheckpoint 的参数

    	filepath = "model_{epoch:03d}-{val_acc:.4f}.h5" #避免文件名称重复
    	save_best_only=False ,#保存所有模型
    	save_weights_only=True ,#仅保留权重参数
    	patience = 10
    

    其他参数都使用默认值。

    2、设置 EarlyStopping 的参数

    	patience = 10, 
    	monitor='acc' 
    

    其他参数都使用默认值。

    3、训练模型

    训练过程中,每个epoch都会保存一个模型文件。由于模型文件太多,可以使用TensorBoard查看训练过程中的训练集的 acc 及 loss ,结合 val_acc = 1 就能确定第几个epoch的模型是最佳模型,再根据模型的文件名称就能找到最佳模型。

参考

https://keras-cn.readthedocs.io/en/latest/other/callbacks/

你可能感兴趣的:(深度学习,keras,模型调参)