一、感受野
一些神经元看线、一些神经元看线的方向,一些神经元有更大的感受野,组合底层的图案
二、卷积层
- CNN里最重要的构建单元就是卷积层
- 神将元在第一个卷积层不是连接输入图片的每一个元素,只是连接他们感受野的像素,以此类推,第二个卷阶层的神经元仅连接位于第一个卷积层的一个小方块的神将元。
- 比如,以前做MNIST的时候,把图像变成1D的,现在直接用2D
三、卷积的计算
- 特征图(Feature Map)
2. 步长(stride)
3. 权值共享
- 在一个特征图里面,所有的神经元共享一样的参数,权值共享
- 在不同的特征图有不同的参数
4.生成的特征图大小计算
单通道卷积计算
例如:输入图片大小为227*227的单通道黑白图片,卷积核大小为3*3,步长为1,求卷积后特征图大小?
特征图大小为:,即生成的特征图大小为111*111
注意:不能整除步长的情况下,需要看填充模式是valid还是same,valid直接忽略余数,向下取整,same模式时,向上取整。
多通道卷积计算
CNN 理解神经网络中卷积(大小,通道数,深度)blog.csdn.net1*1卷积计算
例如:输入图像大小13*13,卷积核大小3*3,步长为1,padding模式为same,则生成的特征图大小为ceil(13/1)=13,既不改变特征图大小。
四、Padding模式
- valid:不适用zero padding,有可能会忽略图片右侧或底下,这个得看stride的设置
- same:必要时会加zero padding,这种情况下,输出神经元个数等于输入神经元个数除以步长向上取整 ceil(13/5) = 3
- 使用same模式,并且步长为1*1时,特征图与输入大小一致,即不改变输入数据大小
五、池化(pooling)
- 目标就是降采样subsample,shrink,减少计算负荷,内存使用,参数数量(也可防止过拟合)
- 减少输入图片大小也是的神经网络可以经受一点图片平移,不受未知的影响
- 正如卷积神经网络一样,在池化层中的每个神经元被连接到上面一层输出的神经元,只对应一小块感受野的区域。我们必须定义大小、步长、padding类型。
- 池化神经元没有权重值,它只是聚合输入取最大值或求平均值
- 2*2的池化核,步长为2,没有填充,只有最大值往下传递,其他输入被丢弃掉了
- 长和宽两倍小,面积4倍小,丢掉了75%的输入值
- 一般情况下,池化层工作于每一个独立的输入通道,所以输出的深度和输入的深度相同
- 当使用same填充模式,并且步长为1*1时,池化不改变feature map大小
六、CNN架构
- 典型的cnn架构堆列一些卷积层
- 一般一个卷积层后跟Relu层,然后是一个池化层,然后另一些个卷积+Relu层+池化层,通过网络传递的图片越来越小,但是也越来越深,例如更多的特征图。
- 最后常规的钱箱反馈神经网络被添加,由一些全连接的层+Relue层,最后是输出层预测,例如一个softmax层输出预测的类概率
- 一个常见的误区是使用卷积核过大,你可以使用和9*9的核同样效果的两个3*3的核,好处是有更少的参数需要去计算,还可以在中间多加一个非线性激活函数Relu,来提供复杂程度
七、经典模型
- LeNet-5架构,1998年
- AlexNet,2012年
- VGG16,2014年
- GoogLeNet,2014年
- ResNet,2015年
VGG16与GoogLeNet:
VGG16只有16层是因为网络层次太深,会导致过拟合。比如红绿灯,只需要知道是红灯还是绿灯就行了,如果网络层次太深,一层层卷积,最后得到了灯的形状、材质等特征,反而不准确。GoogLeNet就把前面卷积的粗粒度特征直接往输出层传递,这样可以得到更深的网络和更多的特征。DenseNet模型则把每一层的特征都往输出层传递。
八、1*1卷积核的作用
升维、降维:增加stride(步长)实现降维;如果步长为1,可以减少nfilters(卷积核数量)实现降维,增加n_filters实现升维
增加非线性变化:每次卷积之后会使用激活函数增加非线性变化
增加通道的交互:输入为224*224*3大小,卷积核大小为7*7*3*1,生成feature map大小为32*32*3*1,即feature map个数只与卷积核个数有关
九、使用卷积层代替全连接
目的是为了网络可以对不同的图片进行提特征,使用全连接时,隐藏层和上一层中间的参数矩阵W形状是固定的,一旦改变图片的大小,网络将不能使用,而使用卷积层,输入不同大小的图片,依然可以进行卷积。
所以,一般来说,含全连接层的模型都要求输入图片是固定大小,如果你的图片集大小不一致,首先要改变图片大小。