ModelCheckpoint详解

本文介绍如何在Keras中正确设置ModelCheckpoint和EarlyStopping回调,以避免因保存最佳模型而导致无法获取最新模型的问题。通过调整参数,确保每个epoch都能保存模型,并结合TensorBoard找出最佳模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用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/
### SAM 架构/模型的详细介绍 SAM 是一种广泛应用于软件架构评估的方法之一,其全称为 **Software Architecture Analysis Methodology**(软件架构分析方法)。以下是关于 SAM 的概念及其相关内容的详细介绍: #### 1. SAM 的核心目标 SAM 的主要目的是通过系统的分析手段来验证和改进软件架构的设计。它特别关注于识别潜在的风险并协调不同利益相关方之间的观点[^1]。 #### 2. 使用的技术与流程 SAM 运用了场景驱动的评估技术,其中场景被用来具体化任何类型的质量属性。这种方法的核心在于将抽象的质量特性转化为具体的、可操作的情景描述。整个评估过程分为五个关键步骤: - 场景开发:创建一系列能够反映系统行为的具体情景。 - 架构描述:对当前的软件架构进行清晰而全面的说明,确保所有参与者都能理解其功能、结构及资源分配方式。 - 单个场景评估:逐一审查各个独立场景下的表现情况。 - 场景交互:研究多个场景间的相互影响关系。 - 总体评价:综合以上各阶段的结果得出最终结论。 #### 3. 主要关注点——质量属性 虽然 SAM 可以处理多种类型的质量指标,但它尤其强调的是系统的可修改性。这是因为良好的可修改性能显著降低未来变更成本,并提高长期维护效率。 #### 4. 利益相关者的参与 成功实施 SAM 方法离不开多方协作。该框架鼓励开发者、客户以及其他相关人员共同参与到讨论过程中去,从而形成统一的认识基础以便做出更加明智合理的决定。 #### 5. 应用时机 理想情况下,应该在完成初步设计方案之后但在进入细节编码之前应用此工具来进行深入探讨。此时段既具备足够的材料供评判又不至于因过早介入而导致不必要的返工浪费。 #### 关联但不同的主题 - TCP/IP协议簇简介 尽管上述内容围绕着 SAM 展开论述, 值得注意的是,在计算机网络领域还存在另一个重要术语叫做 TCP/IP 。这是一个包含了众多子协议的标准集合,旨在解决跨异构环境的数据交换难题。不同于前者专注于内部逻辑构建层面考量因素外,TCP/IP 更侧重外部通讯机制方面的规定制定工作.[^3] ```python # 示例 Python 脚本展示如何加载预训练好的 SAM 模型 import torch from segment_anything import sam_model_registry device = "cuda" if torch.cuda.is_available() else "cpu" sam_checkpoint_path = "./checkpoints/sam_vit_h_4b8939.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint_path).to(device=device) print("Model loaded successfully!") ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值