学习率learning_rate
x += - learning_rate * dx
其中x表示权重参数,dx表示梯度。可以看出,学习率影响了每次参数更新值的大小。
- 调整方法:
使用一个固定的学习率来进行训练的同时观察验证集准确率,每当验证集准确率停止上升,就乘以一个常数(比如0.5)来降低学习率。一般初始可以设为0.1。
接下来一起介绍几个参数的概念:
epoch
表示跑完全部图片的一次过程。epoch越大,训练的次数越多,但也可能造成过拟合的问题。
- 调整方法:
一般可设置为50,如果不收敛,可以适当增加,每次增加5。
batchsize
表示一次迭代输入的训练图片的个数。在合理范围内,增大 Batch_Size 的好处:内存利用率提高了,大矩阵乘法的并行化效率提高。跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
太小可能存在的问题:震荡不收敛
太大可能存在的问题:1 显存爆炸 2 收敛不到谷底
- 调整方法:
由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
可以设为100,如果显存不够用,就减小一点。
step
表示训练的迭代次数(一次迭代是指参数更新一次的过程)。和batchsize、epoch有一定的关系。
- 调整方法:
可根据epoch和batchsize计算出来。
三者的关系:
batchsize * step = epoch * image_num
用于数据增强的参数
- random_crop 随机切割
- random_scale 随机尺寸变化
- random_brightness 随机亮度调整
进行数据增强主要是为了解决样本量不足和样本不均衡的问题,这二者都可能会导致模型的过拟合。由于是迁移学习,我们不需要太大的数据进行训练,因此主要关注的是样本不均衡的问题。
分类方法通常是以总体分类准确率作为学习目标,当样本不均衡的时候,分类模型就会过多的关注多数类,从而使得少数类样本的分类性能下降。上述列出了几种数据增强的方法,但这些方法在有些任务中有可能会丢失掉原始图像的特征,因此最好的解决办法还是重新采样训练集。
一些其他参数
eval_step_interval
几个step输出一次准确率,主要用于观察训练过程
- 调整方法
一般是一个epoch显示一次,可以自己计算一下对应的step。