Layers and Implements
CNN网络主要包括卷积层、池化层、全连接层等。

Convolution Layers
Single channel
1.No padding

给定一张5X5的单通道的灰度图像和一个3X3的卷积核,从左上角开始将对应位置的数字相乘再求和,kernel 依次滑动stride=1,计算得到右侧的结果;
输入输出的尺寸关系为:
Widthout=⌊stridWidthin−Widthkernel+1⌋
代码实现:
2.Padding

给定同样的一张5X5的单通道的灰度图像和一个3X3的卷积核,首先在图像边缘添加零值像素得到padding后的图像。
一般情况下:
padding=⌊2Widthkernel⌋
从左上角开始将对应位置的数字相乘再求和,kernel 依次滑动stride=1,计算得到右侧的结果;
输入输出的尺寸关系为:
Widthout=⌊stridWidthin+2∗padding−Widthkernel+1⌋
Multi channel

对应与多通道的输入图像,就需要多通道的卷积核来分别对各个通道进行卷积计算然后再将三通道数据相加,输出仍为单通道,即一个卷积核对应一个输出。
要获得多个输出,就需要使用多个卷积核来对图像进行卷积计算。

Pooling Layers
pooling的目的是在尽量保留关键信息的情况下缩小feature map的尺寸,从而减少运算量。

取前面卷积的输出中的一个channel为例进行大小为 2x2 的 maxpooling,即每四个元素中选出最大值。pooling前后的尺寸关系:
Widthout=⌊WidthpoolingWidthin⌋
除了 max pooling 外,还有average pooling、medium pooling 等。
Fully Connection Layers

全连接层就是与传统的神经网络一样,输入为一个特征向量,然后经过一系列的前向传播计算得到预测向量。因此卷积操作获得的feature map 要经过flatten操作转换为特征向量,然后再与参数weights进行相乘。
Function Layers
Dropout
在全连接层中,特征向量的长度往往都是非常大的。这样在进行计算时就会有非常大的计算量,与此同时,在进行batch training时计算量就会很容易达到一个不能接受的程度。
为了降低训练时的计算负担,引入了dropout的方法,即在训练时随机的选取一部分参数(可采用将一部分参数置零的方式)进行训练。但是在进行预测时需要将所有参数计入计算范围。
Batch Normalization
图像数据的数据量一般都很大,为了改良数据的分布在一个batch 中对每一张图片进行normalization。
normalization的过程:
Input: Batch value of Xin:{x1,x2,x3,...}Batch mean: μ=m1⋅i=1∑mxiBatch variance: σ2=m1⋅i=1∑m(xi−μ)2Normalize X: xihat=σxi−μOutput:scale and shift Xout:xiout=γxi+β