【Tensorflow】卷积层

1.卷积计算过程

卷积计算可以认为是一种有效提取图像特征的方法,一般用一个正方形的卷积核,按照指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点。每一个步长,卷积核会与输入特征图出现重合区域,重合区域对应元素相乘、求和再加上偏置项得到输出特征的一个像素点。如果输入特征是单通道灰度图,那么卷积核也用深度为1的,如果输入特征是三通道彩色图,那么卷积核用深度为3的。要使卷积核的通道数与输入特征图的通道数一致。卷积核上每一个小颗粒都存储着一个待训练参数,在反向传播中,这些参数会根据梯度下降法进行更新。当有n个卷积核时,会有n个输出特征图,将这n张输出特征图叠加,即卷积核个数决定了该层输出特征图深度。

2.感受野(Receptive Field)

卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。(以下示例均为通道数为1的)

卷积层的权重怎么获得 卷积层数怎么确定_cnn


卷积层的权重怎么获得 卷积层数怎么确定_卷积核_02


设输入特征图宽、高均为X,卷积计算步长为1,当X>10时,两层3*3卷积核优于一层5*5卷积核。

卷积层的权重怎么获得 卷积层数怎么确定_cnn_03

3.全零填充(Padding)

有时,我们希望卷积计算保持输入特征图尺寸不变,可以进行全零填充。计算公式如下:

卷积层的权重怎么获得 卷积层数怎么确定_深度学习_04


比如:一张5*5的输入特征图,经过3*3卷积核的非全零填充卷积后得到的是3*3的输出特征图,如果我想得到的是5*5的输出特征图,则需要进行填充,使得原输入特征图由5*5填充为7*7。

卷积层的权重怎么获得 卷积层数怎么确定_卷积层的权重怎么获得_05

4.Tensorflow描述卷积层
tf.keras.layers.Conv2D(
	filters = 卷积核个数,
	kernel_size = 卷积核尺寸,  # 正方形写核长,或(核高h,核宽w)
	strides = 滑动步长,  #横纵相同写步长整数,或(纵向步长h,横向步长w),默认为1
	padding = "same" or "valid",  #使用全零填充则是same,不使用则是valid(默认)
	activation = "relu" or "sigmoid" or "tanh" or "softmax",  #如果有BN此处不写(该层卷积后还有批标准化,那就不进行激活)
	input_shape = (高,宽,通道数)  #输入特征图维度,可省略
)
5.批标准化

为什么要进行批标准化?因为神经网络对0附近的数据更加敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的情况,标准化可以使数据符合以0为均值,以1为标准差的正态分布,把偏移的特征数据重新拉回到0均值附近。

标准化:使数据符合0均值,1为标准差的分布。

批标准化:对一小批数据(batch),做标准化处理。常用在卷积操作和激活操作之间。

卷积层的权重怎么获得 卷积层数怎么确定_tensorflow_06


由于批标准化在卷积操作和激活操作之间,而激活函数(如下图sigmoid函数所示)在0附近变化明显,使得进入激活函数的数据分布在激活函数线性区,使得输入数据的微小变化更明显的体现在输出上,提升了激活函数对输入数据的区分力。但是,对于激活函数来说,现在集中在线性部分,也就失去了非线性特性。因此在BN操作中为每个卷积核引入了两个可训练参数,缩放因子和偏移因子,他们可以和其他待训练因子一同优化,保证了网络的非线性表达力。

卷积层的权重怎么获得 卷积层数怎么确定_深度学习_07

6.池化
7.舍弃
8.卷积神经网络
9.CIFAR10数据集

后四部分内容明天更新。