对DogsVsCats例子的调优模型训练过程(二)

admin 2025年4月2日23:03:52评论12 views字数 3692阅读12分18秒阅读模式
对DogsVsCats例子的调优模型训练过程》(一)文章中,我们对DogsVsCats0.py进行了训练调优,猫狗的识别准确率从84.5%提升到了93.84%,提升幅度很大。但有一个问题,DogsVsCats0.py只进行了5次迭代学习,而DogsVsCats5.py则进行了30次,次数不同带来了不公平地比较。那好,我们用DogsVsCats0.py也进行30次,看看什么情况,
命令执行:python  $GEMINI_RUN/DogsVsCats0.py --num_epochs 30 --data_dir $GEMINI_DATA_IN1/DogsVsCats/ --train_dir $GEMINI_DATA_OUT
结果输出如下:
对DogsVsCats例子的调优模型训练过程(二)
对DogsVsCats例子的调优模型训练过程(二)
30次迭代后,结果也得到了大幅度的提升,达到了91.22%,但离DogsVsCats5.py的93.84%还有不小差距,说明:我们达到了调优的目的。
在上面的命令行中,我们用到了一个参数--num_epochs 30(标红部分),作用为:num_epochs(或 epochs)是机器学习模型训练过程中的一个关键参数,用于控制模型遍历完整训练数据集的次数
次数越多,效果越好?多少次训练合适?

一、训练次数问题

  1. 定义训练轮次一个 epoch 表示模型将整个训练数据集完整地学习一遍。例如,若 num_epochs=5,模型会对所有训练数据迭代学习 5 次。

  2. 影响模型学习效果

    • 过少(如 num_epochs=1):模型可能未充分学习数据特征,导致欠拟合。

    • 过多(如 num_epochs=100):模型可能过度拟合训练数据(过拟合),泛化能力下降。

3.如何选择 num_epochs

(1).默认值:通常从较小的值(如 5 或 10)开始,观察训练效果。

(2).早停法:使用 EarlyStopping 回调自动终止训练(如验证集精度不再提升时)。

(3).经验调整

    • 简单任务:5-20 轮。

    • 复杂任务:50-100+ 轮(需配合正则化和验证监控)。

4.常见问题

  • 过拟合:若验证集精度在某个 epoch 后开始下降,需减少 num_epochs 或添加正则化。

  • 欠拟合:若训练集和验证集精度均低,可增加 num_epochs 或调整模型结构。

二、对比 DogsVsCats0.py 与 DogsVsCats5.py 不同点

1. 数据处理

  • DogsVsCats0.py

    • 仅划分训练集和测试集,训练数据取前 10000 张猫狗图片,剩余作为测试集。

    • 无验证集,无法监控训练过程中的泛化性能。

    • 使用简单的 tf.data 管道,包含 shuffle 和 prefetch,但缺乏灵活性。

  • DogsVsCats5.py

    • 划分训练集(前 9000)、验证集(1000)、测试集(剩余),更符合实际训练流程。

    • 验证集用于早停和模型选择,避免过拟合。

    • 使用列表推导式构建路径,代码更简洁。

优劣DogsVsCats5.py 的数据划分更合理,验证集和动态监控显著提升模型可靠性;DogsVsCats0.py 的简单划分可能导致过拟合或欠拟合。

2. 数据增强

  • DogsVsCats0.py

    • 无数据增强,直接使用原始图像,模型易受训练数据分布影响。

  • DogsVsCats5.py

    • 训练集使用 _decode_and_augment 进行增强(随机翻转、亮度、对比度调整),提升泛化能力。

    • 验证集和测试集无增强,确保评估结果可靠。

优劣DogsVsCats5.py 的数据增强显著减少过拟合风险,适应更多样的输入;DogsVsCats0.py 的模型可能对训练数据过拟合。

3. 模型结构

  • DogsVsCats0.py

    • 简单卷积网络:4 层卷积(32/64/128/128 通道)+ 全连接层。

    • 无正则化和批归一化,依赖 Dropout 防止过拟合。

  • DogsVsCats5.py

    • 更复杂的网络:增加通道数(最高 256),添加 BatchNormalization 和 L2 正则化

    • 批归一化加速收敛,正则化进一步抑制过拟合。

优劣DogsVsCats5.py 的模型结构更先进,适合复杂特征提取;但参数量更大,训练成本更高。DogsVsCats0.py 的简单结构适合快速实验。

4. 训练策略

  • DogsVsCats0.py

    • 固定学习率(0.001),无动态调整。

    • 仅训练 5 个 epoch,可能欠拟合。

    • 无回调函数,直接保存最终模型。

  • DogsVsCats5.py

    • 动态学习率(指数衰减),平衡收敛速度与稳定性。

    • 使用早停(EarlyStopping)、模型检查点(ModelCheckpoint)和 TensorBoard 日志。

    • 训练 20 个 epoch(可提前终止),资源利用率更高。

优劣DogsVsCats5.py 的训练策略显著优化模型性能,早停和动态学习率提升效率;DogsVsCats0.py 的策略简单但容易欠拟合或过拟合。

5. 评估方法

  • DogsVsCats0.py

    • 手动计算测试集准确率,代码冗余且易出错。

  • DogsVsCats5.py

    • 直接调用 model.evaluate,简洁高效。

优劣DogsVsCats5.py 的评估方法更规范,减少代码错误风险。

总结

  • DogsVsCats0.py:适合快速验证或教学示例,但缺乏现代训练技巧,模型性能和泛化能力有限。

  • DogsVsCats5.py

    • 优势:数据增强、验证集、动态学习率、正则化、早停等策略全面提升模型鲁棒性和准确率。

    • 劣势:实现复杂,训练时间更长,需更多计算资源。

适用场景

  • 追求快速原型验证 → DogsVsCats0.py

  • 追求高性能、泛化能力 → DogsVsCats5.py

三、DogsVsCat5较DogsVsCats0有哪些改进?

1. 更合理的数据划分与验证机制

  • 改进点

    • DogsVsCats5.py 将数据集划分为 训练集(前9000)验证集(9000-10000) 和 测试集(剩余部分),而 DogsVsCats0.py 仅划分训练集和测试集。

    • 验证集的引入使得模型可以在训练过程中监控泛化性能,避免过拟合。

  • 优势

    • 通过验证集的早停(EarlyStopping)和模型检查点(ModelCheckpoint),能自动保存最佳模型并提前终止训练,提升训练效率。

2. 数据增强提升模型泛化能力

  • 改进点

    • DogsVsCats5.py 对训练集应用了 随机水平翻转亮度调整 和 对比度调整 等数据增强操作(_decode_and_augment),而 DogsVsCats0.py 无任何增强。

  • 优势

    • 增强后的数据多样性更高,减少模型对训练集特定模式的依赖,显著提升泛化能力。

3. 更先进的模型结构与正则化技术

  • 改进点

    • 网络深度与通道数:DogsVsCats5.py 的卷积层通道数更高(最高 256),并增加了一层卷积,模型容量更大。

    • 批归一化(BatchNormalization):每个卷积层后添加批归一化,加速收敛并稳定训练过程。

    • L2 正则化:部分卷积层使用 kernel_regularizer=tf.keras.regularizers.l2(1e-4),抑制过拟合。

  • 优势

    • 模型能捕捉更复杂的特征,同时通过正则化和批归一化减少过拟合风险。

4. 动态学习率与智能训练策略

  • 改进点

    • 指数衰减学习率:DogsVsCats5.py 使用 ExponentialDecay 动态调整学习率,平衡训练速度与稳定性。

    • 回调函数:包含早停、模型检查点和 TensorBoard 日志,而 DogsVsCats0.py 仅保存最终模型。

  • 优势

    • 动态学习率避免手动调参的繁琐,早停机制防止无效训练,TensorBoard 提供训练过程可视化。

5. 高效且规范的评估流程

  • 改进点

    • DogsVsCats5.py 直接调用 model.evaluate(test_dataset) 计算测试集准确率,而 DogsVsCats0.py 手动遍历数据集并预测,代码冗余且易错。

  • 优势

    • 简化评估流程,减少代码错误风险,同时提升执行效率。

6. 数据管道的优化

  • 改进点

    • 使用 tf.data.AUTOTUNE 自动优化数据加载并行度(DogsVsCats0.py 使用旧版 tf.data.experimental.AUTOTUNE)。

    • 训练集管道中增加 .prefetch,进一步减少 I/O 瓶颈。

  • 优势

    • 数据加载更高效,充分利用硬件资源,加速训练过程。

总结:DogsVsCats5.py 的核心成功点

  1. 数据管理:验证集 + 数据增强 → 提升泛化能力。

  2. 模型设计:批归一化 + L2 正则化 → 抑制过拟合,加速收敛。

  3. 训练策略:动态学习率 + 早停 → 高效训练与资源节省。

  4. 评估规范:直接调用 evaluate → 代码简洁可靠。

这些改进使得 DogsVsCats5.py 在准确率、训练效率和模型鲁棒性上均显著优于 DogsVsCats0.py,尤其适用于对性能要求较高的实际场景。

四、最好理解是看 源码

DogsVsCats0.py和DogsVsCats5.py,网盘,

链接: https://pan.baidu.com/s/1WJLcg6b6JBT4nesZkhodhg 

提取码: ywxf 

原文始发于微信公众号(MicroPest):对DogsVsCats例子的调优模型训练过程(二)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月2日23:03:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   对DogsVsCats例子的调优模型训练过程(二)https://cn-sec.com/archives/3892541.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息