深度学习模型训练和关键参数调优详解
面向应用场景,从模型选择、模型训练、超参优化和效果展示四个方面进行模型开发。
一、模型选择
从任务类型出发,选择最合适的模型。
1、回归任务
从使用Numpy推导,到使用深度学习框架,一步步走进最简单的回归任务。当人工智能邂逅蓝桥杯算法题,会擦出怎样的火花?https://aistudio.baidu.com/aistudio/projectdetail/1693536
人脸关键点检测 https://aistudio.baidu.com/aistudio/projectdetail/1533049
2、分类任务
基于CIFAR-10数据集实现图像10分类。项目完整代码详见:https://aistudio.baidu.com/aistudio/projectdetail/2134364
3、场景任务
这里说的场景任务是针对某一个特定的场景开发的深度学习任务,相比于回归和分类任务来说,场景任务的难度更高。这里说的场景任务包括但不限于目标检测、图像分割、文本生成、语音合成、强化学习等。
目标检测:基于PaddleX的YOLOv3模型快速实现昆虫检测
人像分割:基于PaddleX核心分割模型 Deeplabv3+Xcetion65 & HRNet_w18_small_v1 实现人像分割
文字识别:基于chinese_ocr_db_crnn_mobile实现文字识别
二、模型训练
1、基本原理
模型训练的基本原理是神经网络梯度下降,详见原生Python和Numpy看模型训练基本原理
2、模型训练通用配置基本原则
- 每个输入数据的维度要保持一致,且一定要和模型输入保持一致。
- 配置学习率衰减策略时,训练的上限轮数一定要计算正确。
- BatchSize不宜过大,太大容易内存溢出,且一般为2次幂。
3、模型训练方式
-
基于高层API训练模型
通过Model.prepare接口来对训练进行提前的配置准备工作,包括设置模型优化器,Loss计算方法,精度计算方法等。
-
使用PaddleX训练模型
YOLOv3模型的训练接口示例,函数内置了piecewise学习率衰减策略和momentum优化器。
三、超参优化
1、什么是超参数?
超参数指的是模型外部的配置变量,是不能通过训练的进行来估计其取值不同的,且不同的训练任务往往需要不同的超参数。
超参数不同,最终得到的模型也是不同的。
一般来说,超参数有:学习率,迭代次数,网络的层数,每层神经元的个数等等。
常见的超参数有以下三类:
- 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等 .
- 优化参数,包括优化方法、学习率、小批量的样本数量等 .
- 正则化系数
实践中,当你使⽤神经⽹络解决问题时,寻找好的超参数其实是一件非常困难的事情,对于刚刚接触的同学来说,都是"佛系调优",这也是一开始就"入土"的原因,没有依据的盲目瞎调肯定是不行的。
2、手动调整超参数的四大方法
我们在使用某一网络时,一般是比较好的论文中出现过的,是证明过的,当然也可以直接套用,然后在这个基础上,调参。
可是如果识别的领域不同,比如同样是LeNet网络,在解决手写数字识别时使用的超参数能得到很好的效果,但是在做眼疾识别时,因为数据集的不同,虽然使用同样的超参数,但是效果可能并不理想。
在<< Neural Network and Deep Learning >>这本书中,作者给出⼀些⽤于设定超参数的启发式想法。⽬的是帮读者发展出⼀套工作流来确保很好地设置超参数。这里我把书上的内容总结一下,再结合自己的思考,与大家共同探讨调整超参数的方法论。
不过呢,目前不存在⼀种通用的关于正确策略的共同认知,这也是超参数调节的"玄学"之处。
-
使用提前停止来确定训练的迭代次数
-
让学习率从高逐渐降低
-
宽泛策略
-
小批量数据(mini-batch)大小不必最优
四、效果展示
1、可视化输入与输出
最直接的方法
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread(PATH_TO_IMAGE)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
2、巧用VisualDL
VisualDL文档:https://ai.baidu.com/ai-doc/AISTUDIO/Dk3e2vxg9#visualdl%E5%B7%A5%E5%85%B7
3、权重可视化
InterpretDL源码:https://github.com/PaddlePaddle/InterpretDL
五、总结
- 只有搞懂了神经网络工作的基本原理,才能更好地进行超参优化,得到效果更好的模型。
- 要学会SubClass形式组网,使用套件虽然简单,但可定制化程度较低。
- 模型训练是本文中最简单的部分,只需要按照文档操作即可,但超参数的选择有很多讲究,超参的好坏往往会影响模型的最终结果
- 效果展示是一个项目的加分项,可视化可以更好地展示你的工作成果。