网络训练技巧:
1.数据增强:缩放、随机位置截取、翻卷、随机旋转、亮度、对比度、颜色变化等方法。
2.学习率衰减:随着训练的进行不断的减小学习率。
例如:一开始学习率0.01,在10000步后降为0.001。
用法:lr = tf.cond(tf.less(step, 10000), lambda: 0.1, lambda: 0.01)
3.dropout:一般用在全连接层。
用法:tf.nn.dropout
4.正则化:有L1和L2正则化,较多的是L2正则化,引入正则化相当于在loss函数上面加上一项。
ps:就是在loss的基础上加上了参数的二范数作为一个正则化,我们在训练网络的时候,不仅要最小化 loss 函数,同
时还要最小化参数的二范数,也就是说我们会对参数做一些限制,不让它变得太大。
用法:l2=slim.regularizers.l2_regularizer(weight_decay=0.0001))
5.批标准化:对于每一层网络的的输出,对其做一个归一化,使其服从标准的正态分布,这样后一层网络的输入也是一个标准的正态分布,所以能够比较好的进行训练,加快收敛速度。
过拟合:以上五点。
欠拟合:进行充分训练、增加模型的复杂度。
网络特点:
VGG:不断堆叠卷积和池化,基本是3*3的卷积核。
ps:两个3*3的卷积核作用等效于一个5*5的卷积核,但是参数却少了大概一半,因此选择用3*3的。
googlenet:采用了inception模块,四个并行卷积层,然后再拼接起来。
ps:第一个直接卷积提取特征、第二第三个先用1*1卷积降低特征通道,再进行卷积、第四个先池化改变输入特征序列再提取特征。
ResNet:跨层求和。
ps:跨层传递梯度,较少了传递的深度,避免出现梯度退化的情况。
DenseNet:跨层将特征在通道维度进行拼接。
ps:前面每一层的参数,都会传递到当前层,保证了梯度更好的传播,也使得能够用低维和高维的特征同时训练,得到更好的结果。
区别与联系:
1.googlenet不同于其他三个网络,它是使用了并行卷积的方法,四个卷积同时进行;
2.ResNet是跨层传播,DenseNet是每一层都传递过来;
3.四个网络,每一个的深度都在增加,对应了深度学习的原意——网络越深,学到的特征越多。
4.每个网络都是卷积+池化的组合去提取特征。