深度学习总结(十一)——early stopping

早停(Early Stopping)是一种有效防止过拟合的策略,它能在模型达到最佳泛化能力时终止训练,避免继续训练导致的过拟合。与L2正则化类似,但早停无需多次尝试不同正则化参数,能一次性找到较好的模型权重。然而,早停方法将优化和正则化过程结合,使得调整模型变得更加复杂,可能在成本函数未达到理想状态时就提前停止训练。

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

这里写图片描述


这里写图片描述

在训练中,我们希望在中间箭头的位置停止训练。而Early stopping就可以实现该功能,这时获得的模型泛化能力较强,还可以得到一个中等大小的w的弗罗贝尼乌斯范数。其与L2正则化相似,选择参数w范数较小的神经网络。

可以用L2正则化代替early stopping。因为只要训练的时间足够长,多试几个lambda。总可以得到比较好的结果。

Early stopping:
优点:只运行一次梯度下降,我们就可以找出w的较小值,中间值和较大值。而无需尝试L2正则化超级参数lambda的很多值。

缺点:不能独立地处理以上两个问题,使得要考虑的东西变得复杂。举例如下:

### 关于深度学习 Callback 的使用方法及常见问题 #### 定义与作用 Callback 是一种用于扩展训练过程的功能接口,在 TensorFlow 和 Keras 中广泛应用。通过回调机制可以在不同阶段执行特定操作,如保存最佳模型、记录日志、调整学习率等[^2]。 #### 基本用法示例 下面是一个简单的例子展示了如何定义并应用 `ModelCheckpoint` 来自动保存最优权重文件: ```python from tensorflow.keras.callbacks import ModelCheckpoint checkpoint_callback = ModelCheckpoint( filepath='best_model.h5', monitor='val_loss', # 监控验证集损失值 save_best_only=True, mode='min' ) model.fit(x_train, y_train, epochs=10, validation_data=(x_val, y_val), callbacks=[checkpoint_callback]) ``` 此代码片段会在每次 epoch 结束时评估验证集上的表现,并仅当新的最低 val_loss 出现时才更新本地磁盘中的 h5 文件。 #### 学习率调度器 (Learning Rate Scheduler) 为了实现更灵活的学习速率控制策略,可以利用内置的 `ReduceLROnPlateau` 或者自定义一个基于性能指标变化规律来动态调节 LR 的方案: ```python from tensorflow.keras.callbacks import ReduceLROnPlateau reduce_lr_callback = ReduceLROnPlateau(monitor='val_accuracy', factor=0.2, patience=5, min_lr=0.0001) history = model.fit(... ,callbacks=[reduce_lr_callback]) ``` 这段脚本会监控验证集中准确度的变化情况;如果连续五轮没有提升,则降低当前学习率为原来的百分之二十直到达到最小阈值为止。 #### TensorBoard 日志记录 TensorFlow 自带强大的可视化工具 —— TensorBoard 可以帮助开发者更好地理解和调试神经网络内部运作状况。只需简单配置如下所示即可开启这项功能: ```python import os from datetime import datetime from tensorflow.keras.callbacks import TensorBoard log_dir = "./logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S") tensorboard_callback = TensorBoard(log_dir=log_dir, histogram_freq=1) model.fit(... ,callbacks=[tensorboard_callback]) ``` 上述设置将会创建一个新的目录存储运行期间产生的各种统计数据以便后续分析查看。 #### Early Stopping 提前终止 为了避免过拟合现象的发生以及节省不必要的计算资源浪费,“提前停止”是一种非常有效的手段之一。它允许算法在检测到一定数量迭代内无明显改进的情况下立即结束整个流程而不必等到预定的最大次数完成: ```python from tensorflow.keras.callbacks import EarlyStopping early_stopping_callback = EarlyStopping(monitor='val_loss', patience=7) model.fit(... ,callbacks=[early_stopping_callback]) ``` 这里设置了监视对象为验证集误差(`val_loss`),并且给予七次机会去寻找更低水平的结果;一旦超出这个范围就触发中断事件。 #### 进阶技巧与其他注意事项 除了以上提到的基础类之外还有许多其他类型的回调函数可供选择,比如 CSVLogger 将历史信息导出成表格形式方便后期处理;LambdaCallback 则提供了更大的灵活性让用户编写任意逻辑作为响应动作等等。值得注意的是并非所有的场景都需要启用全部特性,应当根据实际需求合理挑选组合从而获得最理想的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值