1.经典网络
LetNet-5
每个卷积层后面跟着一个池化层,最后跟着2个全连接层。随着层数和下降,上升。参数共60K左右。
AlexNet
与LetNet相似但更大,表现更好。运用了Relu。使用了多个GPU。参数个数在60M左右
VGG-16
随着层数的增加,和下降,上升。参数在138M左右。
2.ResNet
残差块示意图如下:
残差块就是在普通的神经网络块中加了一个shortcut,使得
而多个残差块的结合就是残差网络:
残差网络在层数较深的情况下也能保持训练误差递减,而普通网络可能会出现训练误差先减少后增加的情况,如下图:
ResNet能取得如上效果的原因:
假设网络中均使用Relu激活函数,所以最后的输出 。这里我们给出 的值:
如果使用L2正则化或者权重衰减,会压缩W和b的值。如果 同时 ,那么上式就变成:
说明对于ResNet容易学习出上面这一恒等式,而对于普通的神经网络随着层数加深可能越来越难以选择出满足恒等式的参数。而这多出来的两层网络并没有降低它的效率,如果它们能学习到其他的信息会有更好的表现。为了确保和有相同的维度,ResNet中运用了许多same convolution。
对于ResNet,作业中给出了两种分类:the identity block(和有相同的维度)和the convolutional block(和有不相同的维度)。
the identity block如下图:
对于卷积操作,batchnorm,和relu,Keras中也给出了方法,示例如下:
X = Conv2D(filters = F1, kernel_size = (1, 1), strides = (1,1), padding = 'valid', name = conv_name_base + '2a', kernel_initializer = glorot_uniform(seed=0))(X)
X = BatchNormalization(axis = 3, name = bn_name_base + '2a')(X)
X = Activation('relu')(X)
对于shortcut的添加:
# Final step: Add shortcut value to main path, and pass it through a RELU activation (≈2 lines)
X = Add()([X_shortcut, X])
X = Activation('relu')(X)
the convolutional block:
在shortcut中添加了卷积层以使得和有相同的维度。
3.1*1卷积
二维上相当于对每一个元素与卷积核数字相乘。三维上则是改变的大小以实现改变维度。
4. Inception Network
在上面的Inception结构中,应用了不同的卷积核,以及带padding的池化层。在保持输入图片大小不变的情况下,通过不同运算结果的叠加,增加了通道的数量。
计算成本:
如上图,输入的shape(28,28,192),卷积核shape(5,5,192)共32个,参数28*28*32*5*5*192=120m个
加了1*1卷积层的bottle neck之后,
参数个数28*28*16*192+28*28*32*5*5*16约为12.4m个,与120m相比少了很多,显著减少计算成本。
inception模块:
inception网络(googlenet):
5.数据扩充
数据不够时,课程中介绍了一些数据扩充的方法如下:
mirroring:镜像翻转
random cropping:随机裁剪,在大图上裁剪出一小部分作为数据样本
color shifting:颜色迁移。改变图片RGB数值。PCA颜色增强:对图片颜色的主色调做较大变化,次色调做较小变化,使得图片整体颜色保持一致