下面来介绍几种简单的训练技巧:
1.首先说一下filter(感受野)的概念:感受野的大小即特征图中的某一单元是从原始输入图像中多大的一块区域中提取的特征;
如上图,第一次卷积后得到的特征图中,每一个小单元的感受野大小为3*3,而第二次卷积后特征图中的每一个小单元对应的感受野大小为5*5,以此类推,如果
用三层3*3的filter,那么最后一层特征图中每一个小单元的感受野大小即为7*7。
同时我们可以推论:卷积层数越多,越后面的特征图中的每个单元的感受野大小就越大,特征提取的效果就越好。
这时我们有一个问题,能不能用一层7*7的filter来代替三层3*3的filter?
由上可知,7*7的filter需要的参数个数为49C*C,而3层3*3的filter需要的参数个数为27C*C;一方面需要的参数个数更少,计算复杂度降低了,另一方面三层3*3的filter即有了三层的激活函数,
使得分类器的非线性更好,因此我们选择3层3*3的filter;
为了得到上面的两个效果,我们还可以使用今年大放异彩的深度参差网络,如下:
(1*1*C)*C/2+3*3*C/2*C/2+1*1*C/2*C=3.25C*C;
(3*3*C)*C=9C*C;
更少的参数和更好的非线性,而且层数增加,参数个数最多停滞,但不会增加!
总结一下,就是:(1)堆叠小的filters;
(2)比如融合3*3的filter和1*1的filter来组成深度参差网络;
(3)将N*N的filter拆分成1*N和N*1的filter;
2.训练技巧之数据预处理:即使输入数据可以成倍增长,尤其对于深度学习这类需要大量训练数据的算法,数据预处理很重要!
预处理的方法大致有:(1)水平翻转;
(2)随机裁剪/大小变换:要对不同的scale做不同的crops;
(3)平移,角度变换,拉伸,修剪等等。。。。
比如下图是水平翻转的效果:
这里注意一点:对于一张原始输入图像,这些操作都要操作一遍,而且参数是随机的;
3.训练技巧之Transfer Learning(即fine tune):就是说我们已经做了数据增强,但需要的数据量还是不够,这时候我们就需要别人训练好的网络,借鉴别人的参数,在此基础上训练自己
的网络;
如上图:如果可提供的训练样本是小的数据集,则只改FC层,若是中数据集,则改FC层和最后一点conv层和pooling层。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:卷积神经网络_(3)_几种简单训练技巧 - Python技术站