You are on page 1of 57

第七章:

卷积神经网络基础
学习目标 狗熊会 | 深度学习入门

1. 卷积神经网络的基本结构;
2. 卷积的概念、分类、原理, TensorFlow 实现和相关性质;
3. 池化的概念、分类、原理与 TensorFlow 实现。

狗熊会|聚数据英才,助产业振兴
PART 7.1
卷积神经网络的基本结构

狗熊会|聚数据英才,助产业振兴
7.1 卷积神经网络 狗熊会 | 深度学习入门

存在问题 ~~~~~~
带来的后果是???过拟合
解决办法:卷积
狗熊会|聚数据英才,助产业振兴
7.1 卷积神经网络 狗熊会 | 深度学习入门

 卷积神经网络又称卷积网络( Convolutional Network ),是在图像处理和计算机视觉领域应用较为广


泛的一种神经网络。
 基本结构:
 输入层
 卷积层:获得更多图像的抽象特征。
 池化层:减少网络中参数。
 全连接层:为后续分类任务做准备。
 输出层

狗熊会|聚数据英才,助产业振兴
PART 7.2
卷积与池化的通俗理解

狗熊会|聚数据英才,助产业振兴
7.2.1 对卷积的理解 狗熊会 | 深度学习入门

 示例任务:分辨照片是否是熊大
 机械化过程:
 需要记录熊大特征的照片,记为“卷积核”;
 用 “卷积核” 扫描身份证,寻找是否有某个位置出现熊大的特征;
 将卷积核与身份证上某个位置的图像特征进行相似度计算,这个计
算就是“卷积”。

狗熊会|聚数据英才,助产业振兴
7.2.2 对池化的理解 狗熊会 | 深度学习入门

 熊大图像是否出现在身份证上,只依赖于计算出的相似特征的最大值,即只需要有一个局部图像与熊大照
片非常相像,就可以认为身份证上出现了熊大头像。
 卷积核在图像上不断扫描的过程中,我们只关心卷积计算结果的最大值,这个最大化的操作,就是一种特
殊的池化方法,被称为最大值池化( Max-Pooling )。
 卷积就是计算某种局部的相似性,而池化就是将某种最突出的相似性选择出来。

狗熊会|聚数据英才,助产业振兴
PART 7.3
卷积

狗熊会|聚数据英才,助产业振兴
7.3 卷积 狗熊会 | 深度学习入门

狗熊会|聚数据英才,助产业振兴
7.3 卷积 狗熊会 | 深度学习入门

狗熊会|聚数据英才,助产业振兴
上述例子发现:卷积核能够提取图像的基本特征。
狗熊会 | 深度学习入门

 卷积( Convolutional )是一种特殊的线性运算,用来代替一般的矩阵乘法运算。


 卷积运算由以下两个关键参数定义:
假设输出图像大小为
 卷积核的大小 n*n 、卷积核大小为 f*f ,
 输出特征图的深度:由使用的卷积核的数量决定 输出图像大小则为
(n−f+1)*(n−f+1) 。( f 一般
为奇数)
1 0 1
带来的问题是??
① 卷积运算后,输出图片

*
1 1 0 尺寸缩小。②原始图片边

1 1 1
= 缘信息对输出贡献得少,
输出图片丢失边缘信息。

解决方法:
padding 操作( Same
卷积核 convolutions )
3*3 3*3
5*5
卷积计算示例图

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 卷积运算类型
 full 卷积
 same 卷积
 valid 卷积
 示例: 3 行 3 列的二维张量和 2 行 2 列的二维张量的卷积

又称为卷积核或滤波器

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 full 卷积
 计算过程:
 沿着按照先行后列的顺序移动,每
移动到一个固定位置,对应位置的
值相乘,然后求和。
 full 是完全的意思,即只要像素矩阵
与卷积核元素有一个位置重叠,就
要计算,并将落在像素矩阵外的元
素全部视为 0 。

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 full 卷积
 在实际应用当中有意义未知,它可能对有些数据有效,对有些数据无效
 计算结果

 TensorFlow 代码实现
tf.nn.conv2d ( input,filter,strides,padding,use_cudnn_on_gpu = True,
data_format = “NHWC”,dilations = [1,1,1,1],name = None )

输入张量 卷积核尺寸 步长 卷积形式


[1,strides,strides,1] [SAME , Valid]

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 same 卷积
 same 的含义是卷积前后像素矩阵保持同样维度。
 常用
 指定起始点

高度( H ) 宽度( W ) 起点位置


H 2 W 2
偶数 偶数 2
,
2
H  2 W 1
偶数 奇数 ,
2 2
H 1 W  2
奇数 偶数 ,
2 2
H 1 W 1
奇数 奇数 ,
2 2

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 same 卷积
 计算结果

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 same 卷积
 TensorFlow 代码实现

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 valid 卷积
 只考虑 X 能完全被 K 覆盖的情况
 计算过程

狗熊会|聚数据英才,助产业振兴
7.3.1 卷积运算原理 狗熊会 | 深度学习入门

 valid 卷积
 计算结果

 TensorFlow 代码实现
conv=tf.nn.conv2d(X,K,(1,1,1,1),'VALID')

狗熊会|聚数据英才,助产业振兴
7.3.2 卷积结果的输出 狗熊会 | 深度学习入门

 在卷积过程中,卷积核在垂直方向的移动步长为 SR ,在水平方向上的移动步长为 SL ,则 same 和 valid


卷积的输出结果大小计算:

Same 卷积 Valid 卷积
输入张量大小 R行L列 R行L列
卷积核大小 FR 行 FL 列 FR 行 FL 列

垂直方向移动步长 SR SR

水平方向移动步长 SL SL

ceil ( R/SR )行 floor((R-FR)/SR)+1 行


输出结果
ceil ( L/SL )列 floor((L-FL)/SL)+1 s 列

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 基本的多通道卷积
 示例:
 1 个 3 行 3 列 2 深度的三维张量与 1 个 2 行 2 列 2 深度的三维卷积核的 valid 卷积

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 基本的多通道卷积
 卷积过程

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 基本的多通道卷积
 卷积结果

 TensorFlow 代码实现

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 单个张量与多个卷积核的卷积
 卷积过程

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 单个张量与多个卷积核的卷积
 TensorFlow 代码实现

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 多个张量与多个卷积核的卷积
 卷积过程

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 多个张量与多个卷积核的卷积
 TensorFlow 代码实现

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 在每一通道上分别卷积(深度可分离卷积)
 将张量与卷积核对应的每一层进行线性运算,但是不将每一层的结果相加
 卷积过程

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 单个张量与多个卷积核在通道上分别卷积
 卷积过程

狗熊会|聚数据英才,助产业振兴
7.3.3 多通道卷积原理 狗熊会 | 深度学习入门

 单个张量与多个卷积核在通道上分别卷积
 TensorFlow 代码实现
conv=tf.nn.depthwise_conv2d(X,K,(1,1,1,1),'VALID')

狗熊会|聚数据英才,助产业振兴
7.3.4 卷积运算的三个特性 狗熊会 | 深度学习入门

 稀疏连接( Sparse Connectivity )


 降低计算复杂度。
 减少因连接过多产生过拟合。
 参数共享
 参数共享是指相同的参数被用在一个模型的多个函数中。
 平移不变性
 当卷积在图像的某个位置学习到存在的特征时,它可以在之后的任何地方识别这个特征。
 使得卷积神经网络在处理图像数据时,可以高效地利用数据。

狗熊会|聚数据英才,助产业振兴
PART 7.4
池化操作

狗熊会|聚数据英才,助产业振兴
7.4 池化操作 狗熊会 | 深度学习入门

 池化( Pooling )操作是对卷积得到的结果进一步处理,它是将平面内某一位置及其相邻位置的特征值


进行统计汇总,并将汇总后的结果作为这一位置在该平面内的值输出。
 分类
 最大值池化
 平均值池化

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 Same 最大值池化
 示例:

张量 X 池化窗口

 指定起始点——与 same 卷积起始点规则类似

高度( H ) 宽度( W ) 起点位置


H 2 W 2
偶数 偶数 2
,
2
H  2 W 1
偶数 奇数 2
,
2
H 1 W  2
奇数 偶数 2
,
2
H 1 W 1
奇数 奇数 ,
2 2

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 Same 最大值池化
 计算过程

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 Same 最大值池化
 池化结果

 TensorFlow 代码实现:
 tf.nn.max_pool()

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 多通道张量的 same 最大值池化


 示例:

三维张量 池化窗口
X

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 多通道张量的 same 最大值池化


 计算过程(步长为 2 ):

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 多通道张量的 same 最大值池化


 计算结果(步长为 2 ):

 TensorFlow 代码实现

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 卷积与池化的区别
 卷积核的权重是一个未知的参数;而池化仅仅没有未知参数需要估计,也不需要参数优化的过程。因
此,对计算机而言,池化是非常简单的操作。
 不管输入的像素矩阵有多少通道,只要进行卷积运算,一个卷积核参与计算只会产生一个通道;而池
化是分层运算,输出的像素矩阵的通道取决于输入像素矩阵的通道数。

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 多个张量的 same 最大值池化


 计算过程(步长为 2 ):

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 多个张量的 same 最大值池化


import tensorflow as tf
 TensorFlow 代码实现: X=tf.constant(
[
[
[[2,5],[3,3],[8,2]],
[[6,1],[1,2],[5,4]],
[[7,9],[2,-3],[-1,3]]
],
[
[[3,1],[-1,4],[3,2]],
[[9,7],[2,-1],[4,3]],
[[8,-2],[1,5],[5,9]]
]
]
,tf.float32)
maxPool=tf.nn.max_pool(X,(1,2,2,1),
[1,2,2,1],'SAME')
session=tf.Session()
print(session.run(maxPool))

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 same 平均值池化
 计算过程(步长为 2 ):

狗熊会|聚数据英才,助产业振兴
7.4.1 same 池化 狗熊会 | 深度学习入门

 same 平均值池化
 池化结果:

 TensorFlow 代码实现: import tensorflow as tf


X=tf.constant(
 tf.nn.avg_pool() [
[
[[3,1],[-1,4],[3,2]],
[[9,7],[2,-1],[4,3]],
[[8,-2],[1,5],[5,9]]
]
]
,tf.float32)
avgPool=tf.nn.avg_pool(X,(1,2,2,1),[1,2,2,1],'SAME')
session=tf.Session()
print(session.run(avgPool))

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 valid 最大值池化
 valid 池化的池化窗口只在张量内移动
 示例:

三维张量 池化窗口
X

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 valid 最大值池化
 计算过程(步长为 1 ):

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 valid 最大值池化
 池化结果:

import tensorflow as tf
 TensorFlow 代码实现: X=tf.constant(
[
[
[[3],[2],[1],[4]],
[[8],[1],[5],[9]],
[[6],[2],[-1],[7]],
[[-3],[4],[6],[5]]
]
]
,tf.float32)
maxPool=tf.nn.max_pool(X,(1,2,2,1),
[1,1,1,1],'VALID')
session=tf.Session()
print(session.run(maxPool))
狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 多通道张量的 valid 最大值池化


 示例:

三维张量 池化窗口
X

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 多通道张量的 valid 最大值池化


 计算过程(步长为 1 ):

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 多通道张量的 valid 最大值池化


 池化结果:

 TensorFlow 代码实现:
X=tf.constant(
[
[
[[3,1],[-1,4],[3,2]],
[[9,7],[2,-1],[4,3]],
[[8,-2],[1,5],[5,9]]
]
]
,tf.float32)
maxPool=tf.nn.max_pool(X,(1,2,2,1),
[1,1,1,1],'VALID')
session=tf.Session()
print(session.run(maxPool))

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 多个张量的 valid 最大值池化


 计算过程:

狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 多通道张量的 valid 最大值池化


import tensorflow as tf
 TensorFlow 代码实现: X=tf.constant(
[
[
[[3,1],[-1,4],[3,2]],
[[9,7],[2,-1],[4,3]],
[[8,-2],[1,5],[5,9]]
],
[
[[1,4],[9,3],[1,1]],
[[1,1],[1,2],[3,3]],
[[2,1],[3,6],[4,2]]
]

]
,tf.float32)
maxPool=tf.nn.max_pool(X,(1,2,2,1),
[1,1,1,1],'VALID')
session=tf.Session()
print(session.run(maxPool))
狗熊会|聚数据英才,助产业振兴
7.4.2 valid 池化 狗熊会 | 深度学习入门

 valid 平均值池化
tf.nn.avg_pool(X,…,
 TensorFlow 代码实现: …,'VALID')

狗熊会|聚数据英才,助产业振兴
课后习题 狗熊会 | 深度学习入门

 课后习题
 1 . same 卷积和 valid 卷积的区别是什么?
 2 .卷积和池化的区别与联系是什么?
 3 .如果输入图像的像素矩阵是,用 96 个规格为的卷积核进行 valid 卷积,设定步长为 4 ,输出矩
阵的维度分别是多少?
 4 .如果输入图像的像素矩阵是,用 64 个规格为的卷积核进行 same 卷积,输出矩阵的维度是多少?
再对输出矩阵进行步长为 2 ,规格为的最大值池化,输出矩阵的维度是多少?
 5 .传统的矩阵操作是建立在线性代数和线性空间基础上的,卷积的矩阵操作和传统的矩阵操作有什
么异同?

狗熊会|聚数据英才,助产业振兴
THANK YOU 狗熊会
狗熊会|聚数据英才,助产业振兴

You might also like