李宏毅机器学习hw3 Boss baseline(2023)

本文讨论的是一个图像识别分类问题,主要介绍了在学习过程中遇到的基线代码和最终实现的高分策略。首先,我们引入的是基于图像识别的机器学习项目,具体信息可参阅2023年ML课程网站(ntu.edu.tw)及提供的基线代码(google.com)。

通过运行基线代码,我们观察到了不同层次的基线实现。初始的简单基线(0.63733)在理解问题的基础上进行简单的模型构建。接着,中等基线(0.70000)引入了图像数据增强,这一策略在识别性能上有显著提升。具体而言,未进行数据增强的训练准确性图表明,图像数据增强是提高模型表现的关键因素。

进一步,优化策略中包含了一个有趣的技巧:通过调整DataLoader的并发数量(Train用4~8个并发,persistent_workers=True,Test用2个并发),可以将训练时间显著缩短至9秒一轮,同时CPU核的使用率达到满载,支持多个训练任务并行执行,从而加快了实验进程。

在更高层次的基线(0.81400)中,采用了更复杂的策略,如使用预定义的CNN模型(如resnet)并加入dropout、增加训练轮数、提高数据变换复杂度等。在深度学习实践中,这些策略有助于模型的泛化能力。值得注意的是,虽然使用res50模型在一段时间内效果良好,但随着训练轮数的增加,模型的增益速度减缓,考虑到时间成本,最终选择在500次epoch后停止训练。

总结而言,有效的策略包括但不限于:

1. 在全连接层加入dropout(0.5)并加深一层(0.75-->0.77)。

2. 增加训练轮数(0.77-->0.82)。

3. 提高数据变换复杂度(0.77-->0.82)。

4. 在网格训练过程中,从200个epoch左右开始达到0.805,至300个epoch时达到0.82的最优结果。

5. 使用预定义的CNN模型,结合dropout和更深的网络结构。

6. 加大训练量,以实现更好的泛化能力(0.82-->0.82)。

在进一步的数据增强中,通过增加图像增强的复杂度和引入BatchNormalization层,模型的性能得到了提升,最终达到0.844的准确率。经过Adam优化器的训练,模型性能达到了0.828,使用SGD优化器的性能虽稍逊,但在特定调整下,依然有提升空间。

在集成学习(ensemble)策略上,通过选择多个模型进行组合,最终的boss baseline(0.87400)成绩得以实现。策略包括使用不同的网格结构、合并数据集、调整学习率衰减策略、引入归一化、使用测试时增强(TTA)等。在测试时应用增强方法作为数据增强策略,通过结合多个结果的众数,模型的性能得以进一步优化。

总结的几个关键点包括并发加载、数据复杂性与训练轮数的关系、trick在模型优化中的应用、ensemble策略的优缺点,以及在验证集不足时直接合并到训练集的策略。整体而言,本文通过逐步优化基线模型,最终达到了较高准确率的boss baseline,虽然过程复杂且时间成本较高,但通过合理的策略调整,有效提升了模型性能。

本文的代码和相关文件已开源,具体路径请参考百度网盘链接(pan.baidu.com/s/1kDSS9p... 提取码:ncm3),或直接运行ensemble.py模块集成最终结果。训练.py、ensemble.py和TTA.py三个模块的结构基本遵循原代码框架,可调整路径以适应不同的训练需求。