TensorFlow学习笔记——(8)卷积神经网络的相关操作

文章目录

      • 一、感受野(Receptive Field)
        • 1、定义
        • 2、理解
        • 3、比较
      • 二、全零填充(padding)
        • 1、作用
        • 2、计算
        • 3、TF描述全零填充
      • 三、TF描述卷积层
        • 1、格式
        • 2、实例
      • 四、批标准化(Batch Normalization,BN)
        • 1、定义与作用
        • 2、TF描述批标准化
        • 3、实例
      • 五、池化(Pooling)
        • 1、定义和作用
        • 2、TF描述池化
        • 3、实例
      • 六、舍弃(Dropout)
        • 1、定义和作用
        • 2、TF描述舍弃
        • 3、实例

一、感受野(Receptive Field)

1、定义

卷积神经网络各输出特征图中的每个像素点,在原始输入图片上映射区域的大小.

2、理解

如下图所示:
当用33卷积核在55输入特征图上卷积时,得到一个33的输出特征图(数字1),此时数字1映射到输入特征图55上,感受野是3;当在数字1上再次使用33卷积核,得到1的输出特征图(数字2),2映射到1上感受野是3,映射到55上感受野是5.
如果直接将55卷积核作用在55输入特征图上,得到数字3,3映射到输入特征图上感受野是5。
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第1张图片

3、比较

从上面可以看到,两层33卷积核和一层55卷积核的特征提取能力是一样的,那么选择哪种更好呢?
此时需要考虑两种类型所承载的待训练参数和计算量了,比较如下图所示:
当输入特征图边长大于10个像素点时,两层33卷积核优于一层55卷积核。
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第2张图片

二、全零填充(padding)

1、作用

当希望卷积计算保持输入特征图的尺寸不变时,可以使用全零填充,也就是在输入特征图周围填充0。
如下图:进行全零填充后,卷积核33,步长1,输出特征图仍为55*1
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第3张图片

2、计算

卷积输出特征图维度的计算公式
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第4张图片
如下图,左侧是使用全零填充,右侧不使用全零填充。
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第5张图片

3、TF描述全零填充

  • 使用全零填充padding='SAME'
  • 不使用全零填充padding='VALID'

三、TF描述卷积层

1、格式

TensorFlow学习笔记——(8)卷积神经网络的相关操作_第6张图片
上图中#如有BN此处不写:意思是如果后面还有批标准化处理,则不写激活函数。

2、实例

描述了三层卷积计算,分别用三种形式,可以根据自己习惯选择。

model = tf.keras.models.Sequential([
    Conv2D(6,5,padding='valid',activation='sigmoid'),
    MaxPool2D(2,2),
    Conv2D(6,(5,5),padding='valid',activation='sigmoid'),
    MaxPool2D(2,(2,2)),
    Conv2D(filters=6,kernel_size=(5,5),padding='valid',activation='sigmoid'),
    MaxPool2D(pool_size=(2,2),strides=2),
    Flatten(),
    Dense(10,activation='softmax')
])

四、批标准化(Batch Normalization,BN)

1、定义与作用

(1)定义
神经网络对0附近的数据更敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的情况。

  • 标准化:可以使数据符合以0为均值,1为标准差的标准正态分布,把偏移的特征数据重新拉回到0附近。
  • 批标准化:对一小批数据(batch),做标准化处理,使数据回归标准正态分布,常用在卷积和激活操作之间。
    TensorFlow学习笔记——(8)卷积神经网络的相关操作_第7张图片
    TensorFlow学习笔记——(8)卷积神经网络的相关操作_第8张图片
    (2)作用
    将原本偏移的特征数据,重新拉回到0均值,使进入激活函数的数据,分布在激活函数线形区,使得输入数据的微小变化,更明显的体现到激活函数的输出。
    TensorFlow学习笔记——(8)卷积神经网络的相关操作_第9张图片
    但是这种简单的标准化,使特征数据完全满足标准正态分布,集中在激活函数中心的线形区域,使激活函数丧失了非线性特性。
    因此,在BN操作中,为每一个卷积核引入两个可训练参数:缩放因子和偏移因子,反向传播时,这两个因子会与其他待训练参数一同被训练优化,使标准正态分布后的特征数据,通过缩放因子和偏移因子,优化了特征数据分布的宽窄和偏移量,保证了网络的非线性表达力。
    TensorFlow学习笔记——(8)卷积神经网络的相关操作_第10张图片

2、TF描述批标准化

tf.keras.layers.BatchNormalization()

3、实例

model = tf.keras.models.Sequential([
    Conv2D(filters=6,kernel_size=(5,5),padding='same'), # 卷积层
    BatchNormalization(), # BN层
    Activation('relu'), # 激活层
    MaxPool2D(pool_size=(2,2),strides=2,padding='same'),
    Dropout(0.2), #dropout层
])

五、池化(Pooling)

1、定义和作用

  • 作用:用于减少卷积神经网络中的特征数据量。
  • 分类:最大值池化可提取图片纹理,均值池化可保留背景特征。

如下图,用2*2池化核对输入图片以2为步长进行池化,输出图片将变成输入图片的四分之一大小。
上下两个分别是最大值池化和均值池化。
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第11张图片

2、TF描述池化

TensorFlow学习笔记——(8)卷积神经网络的相关操作_第12张图片

3、实例

model = tf.keras.models.Sequential([
    Conv2D(filters=6,kernel_size=(5,5),padding='same'), # 卷积层
    BatchNormalization(), # BN层
    Activation('relu'), # 激活层
    MaxPool2D(pool_size=(2,2),strides=2,padding='same'), # 池化层
    Dropout(0.2), #dropout层
])

六、舍弃(Dropout)

1、定义和作用

为了缓解神经网络过拟合,在神经网络训练时,将隐藏层的部分神经元按照一定概率从神经网络中暂时舍弃,神经网络使用时,被舍弃的神经元恢复链接。
TensorFlow学习笔记——(8)卷积神经网络的相关操作_第13张图片

2、TF描述舍弃

tf.keras.layers.Dropout(舍弃的概率)

3、实例

model = tf.keras.models.Sequential([
    Conv2D(filters=6,kernel_size=(5,5),padding='same'), # 卷积层
    BatchNormalization(), # BN层
    Activation('relu'), # 激活层
    MaxPool2D(pool_size=(2,2),strides=2,padding='same'), # 池化层
    Dropout(0.2), #dropout层
])

你可能感兴趣的:(TensorFlow学习笔记,卷积,深度学习,卷积神经网络,tensorflow,python)