【Tensorflow】卷积层

【Tensorflow】卷积层

1.卷积计算过程

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

2.感受野(Receptive Field)

卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小。(以下示例均为通道数为1的)
感受野
在这里插入图片描述
设输入特征图宽、高均为X,卷积计算步长为1,当X>10时,两层3*3卷积核优于一层5*5卷积核。
在这里插入图片描述

3.全零填充(Padding)

有时,我们希望卷积计算保持输入特征图尺寸不变,可以进行全零填充。计算公式如下:
在这里插入图片描述
比如:一张5*5的输入特征图,经过3*3卷积核的非全零填充卷积后得到的是3*3的输出特征图,如果我想得到的是5*5的输出特征图,则需要进行填充,使得原输入特征图由5*5填充为7*7。
在这里插入图片描述

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

sigmoid函数

6.池化

7.舍弃

8.卷积神经网络

9.CIFAR10数据集

后四部分内容明天更新。

猜你喜欢

转载自blog.csdn.net/qq_45746168/article/details/128075386