文章目录
一、卷积层
1.1 二维卷积 (如灰度图像)
滤波器 Filter
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
1
1
0
0
1
n
×
n
图
像
∗
1
0
−
1
1
0
−
1
1
0
−
1
f
×
f
滤
波
器
=
3
3
−
3
3
3
−
3
3
3
−
3
(
n
−
f
+
1
)
×
(
n
−
f
+
1
)
输
出
图
像
\begin{array}{|c|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \colorbox{aqua}1 & \colorbox{aqua}1 & \colorbox{aqua}0 & \color{red}0 & \color{red}1 \\ \hline \color{red}1 & \color{red}1 & \color{red}0 & \color{red}0 & \color{red}1 \\ \hline \color{red}1 & \color{red}1 & \color{red}0 & \color{red}0 & \color{red}1 \\ \hline \end{array} ^{图像}_{n \times n} * \quad \begin{array}{|c|c|c|} \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \color{red}1 & \color{red}0 & \color{red}-1 \\ \hline \end{array}^{滤波器}_{f \times f} = \begin{array}{|c|c|c|} \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \color{red}3 & \color{red}3 & \color{red}-3 \\ \hline \end{array} ^{输出图像}_{(n-f+1) \times (n-f+1)}
1111111111000000000011111n×n图像∗111000−1−1−1f×f滤波器=333333−3−3−3(n−f+1)×(n−f+1)输出图像
其中,
∗
*
∗ 表示交叉相关,但是在深度学习中通常称为卷积 (实际上不是卷积,卷积操作还要对滤波器关于斜对角线进行翻转)
垂直滤波器 (以
3
×
3
3\times3
3×3为例)
[
1
0
−
1
1
0
−
1
1
0
−
1
]
,
[
1
0
−
1
2
0
−
2
1
0
−
1
]
,
[
3
0
−
3
10
0
−
10
3
0
−
3
]
\left[ \begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1\\ \end{matrix} \right], \left[ \begin{matrix} 1&0&-1 \\ 2&0&-2 \\ 1&0&-1\\ \end{matrix} \right], \left[ \begin{matrix} 3&0&-3 \\ 10&0&-10 \\ 3&0&-3\\ \end{matrix} \right]
⎣⎡111000−1−1−1⎦⎤,⎣⎡121000−1−2−1⎦⎤,⎣⎡3103000−3−10−3⎦⎤
水平滤波器 (以
3
×
3
3\times3
3×3为例)
[
1
1
1
0
0
0
−
1
−
1
−
1
]
,
[
1
2
1
0
0
0
−
1
−
2
−
1
]
,
[
3
10
−
3
0
0
0
−
3
−
10
−
3
]
\left[ \begin{matrix} 1&1&1 \\ 0&0&0 \\ -1&-1&-1 \\ \end{matrix} \right], \left[ \begin{matrix} 1&2&1 \\ 0&0&0 \\ -1&-2&-1 \\ \end{matrix} \right], \left[ \begin{matrix} 3&10&-3 \\ 0&0&0 \\ -3&-10&-3 \\ \end{matrix} \right]
⎣⎡10−110−110−1⎦⎤,⎣⎡10−120−210−1⎦⎤,⎣⎡30−3100−10−30−3⎦⎤
把滤波器当作参数进行训练
[
w
1
w
2
w
3
w
4
w
5
w
6
w
7
w
8
w
9
]
\left[ \begin{matrix} w_{1}&w_{2}&w_{3} \\ w_{4}&w_{5}&w_{6} \\ w_{7}&w_{8}&w_{9} \\ \end{matrix} \right]
⎣⎡w1w4w7w2w5w8w3w6w9⎦⎤
实现卷积:
- conv-forward
- tf.nn.conv2d
- tf.keras.Conv2D
填充 Padding
如果重复滤波会出现的问题:
- 图片会很快缩小
- 边缘图像利用率很低,只在最初几次用到
策略:Padding,即每次滤波用 p p p 层额外的边缘填充图像,这样输出的图像大小为 n + 2 p − f + 1 n+2p-f+1 n+2p−f+1
"Valid" covolution: no padding,即
p
=
0
p=0
p=0.
"Same" convalution: 输出图像和原图像大小一致,即要求填充
p
=
f
−
1
2
p = \frac{f-1}{2}
p=2f−1 层,所以通常要求
f
f
f 是奇数.
卷积步长 Strided Covolution
滤波器以步长s进行移动,则输出图像大小为:
⌊
n
+
2
p
−
f
s
+
1
⌋
×
⌊
n
+
2
p
−
f
s
+
1
⌋
\left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor
⌊sn+2p−f+1⌋×⌊sn+2p−f+1⌋
其中,
⌊
⋅
⌋
=
f
l
o
o
r
(
⋅
)
\lfloor\cdot\rfloor=floor(\cdot)
⌊⋅⌋=floor(⋅) 表示向下取整,
1.2 三维卷积 (如RGB图像)
类比于普通的神经网络:
例:如果有10个过滤器,每个过滤器的大小为
3
×
3
×
3
3\times3\times3
3×3×3,那么参数的个数为
27
∗
10
+
10
=
280
27*10+10=280
27∗10+10=280.
记号
超
参
数
记
号
p
a
d
d
i
n
g
p
[
l
]
s
t
r
i
d
e
s
[
l
]
f
i
l
t
e
r
s
i
z
e
f
[
l
]
×
f
[
l
]
×
n
c
[
l
−
1
]
n
u
m
b
e
r
o
f
f
i
l
t
e
r
n
c
[
l
]
\def\arraystretch{1.5} \begin{array}{c:c} 超参数 & 记号 \\ \hline padding & \color{red}p^{[l]} \\ \hline stride & \color{red}s^{[l]} \\ \hline filter\ size & f^{[l]} \times {\color{red}f^{[l]}} \times n_{c}^{[l-1]} \\ \hline number\ of\ filter & \color{red}n_{c}^{[l]} \\ \end{array}
超参数paddingstridefilter sizenumber of filter记号p[l]s[l]f[l]×f[l]×nc[l−1]nc[l]
参 数 s h a p e W e i g h t f [ l ] × f [ l ] × n c [ l − 1 ] × n c [ l ] b i a s 1 × 1 × 1 × n c [ l ] \def\arraystretch{1.5} \begin{array}{c:c} 参数 & shape \\ \hline Weight & f^{[l]}\times f^{[l]} \times n_{c}^{[l-1]} \times n_{c}^{[l]} \\ \hline bias & 1 \times 1 \times 1 \times n_{c}^{[l]} \\ \end{array} 参数Weightbiasshapef[l]×f[l]×nc[l−1]×nc[l]1×1×1×nc[l]
l a y e r s h a p e o f 1 s h a p e o f m i n p u t n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] m × n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] o u t p u t n H [ l ] × n W [ l ] × n c [ l ] m × n H [ l ] × n W [ l ] × n c [ l ] \def\arraystretch{1.5} \begin{array}{c:c:c} layer & shape\ of\ 1& shape\ of\ m\\ \hline input & n_{H}^{[l-1]} \times n_{W}^{[l-1]} \times n_{c}^{[l-1]} & m \times n_{H}^{[l-1]} \times n_{W}^{[l-1]} \times n_{c}^{[l-1]} \\ \hline output & {\color{green}n_{H}^{[l]}} \times {\color{green}n_{W}^{[l]}} \times n_{c}^{[l]} & m \times {\color{green}n_{H}^{[l]}} \times {\color{green}n_{W}^{[l]}} \times n_{c}^{[l]} \end{array} layerinputoutputshape of 1nH[l−1]×nW[l−1]×nc[l−1]nH[l]×nW[l]×nc[l]shape of mm×nH[l−1]×nW[l−1]×nc[l−1]m×nH[l]×nW[l]×nc[l]
其中,
n
H
[
l
]
=
⌊
n
H
[
l
−
1
]
+
2
p
[
l
]
−
f
[
l
]
s
[
l
]
+
1
⌋
n
W
[
l
]
=
⌊
n
w
[
l
−
1
]
+
2
p
[
l
]
−
f
[
l
]
s
[
l
]
+
1
⌋
\begin{aligned} n_{H}^{[l]} = \left\lfloor\frac{n_{H}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\right\rfloor \\ n_{W}^{[l]} = \left\lfloor\frac{n_{w}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\right\rfloor \end{aligned}
nH[l]=⌊s[l]nH[l−1]+2p[l]−f[l]+1⌋nW[l]=⌊s[l]nw[l−1]+2p[l]−f[l]+1⌋
2 池化层
average pooling
max pooling (用的更多):
1
3
2
1
2
9
1
1
1
3
2
3
6
6
1
2
→
m
a
x
p
o
o
l
i
n
g
f
=
2
,
s
=
2
9
2
6
3
\begin{array}{|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{green}2 & \colorbox{green}1 \\ \hline \colorbox{aqua}2 & \colorbox{aqua}9 & \colorbox{green}1 & \colorbox{green}1 \\ \hline \colorbox{Salmon}1 & \colorbox{Salmon}3 & \colorbox{yellow}2 & \colorbox{yellow}3 \\ \hline \colorbox{Salmon}6 &\colorbox{Salmon}6 & \colorbox{yellow}1 & \colorbox{yellow}2 \\ \hline \end{array} \xrightarrow[max\ pooling]{f=2,\ s=2} \begin{array}{|c|c|} \hline \colorbox{aqua}9 & \colorbox{green}2 \\ \hline \colorbox{Salmon}6 & \colorbox{yellow}3 \\ \hline \end{array}
1216393621211132f=2, s=2max pooling9623
1 3 2 1 3 2 9 1 1 5 1 3 2 3 2 8 3 5 1 0 5 6 1 2 9 → m a x p o o l i n g f = 3 , s = 1 9 9 5 9 9 5 8 6 9 \begin{array}{|c|c|c|c|c|} \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{aqua}2 & 1 & 3 \\ \hline \colorbox{aqua}2 & \colorbox{aqua}9 & \colorbox{aqua}1 & 1 & 5\\ \hline \colorbox{aqua}1 & \colorbox{aqua}3 & \colorbox{aqua}2 & 3 & 2\\ \hline 8 & 3 & 5 &1 & 0 \\ \hline 5 & 6 &1 &2 & 9 \\ \hline \end{array} \xrightarrow[max\ pooling]{f=3,\ s=1} \begin{array}{|c|c|c|} \hline \colorbox{aqua}9 & 9 & 5\\ \hline 9 & 9 & 5 \\ \hline 8 & 6 & 9 \\ \hline \end{array} 1218539336212511131235209f=3, s=1max pooling998996559
如果有多通道,那么每层通道都进行一样的pooling操作,输入和输出的形状为:
n
H
×
n
W
×
n
c
↓
⌊
n
+
2
p
−
f
s
+
1
⌋
×
⌊
n
+
2
p
−
f
s
+
1
⌋
×
n
c
n_{H} \times n_{W} \times n_{c} \\ \downarrow \\ \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times \left\lfloor\frac{n+2p-f}{s}+1\right\rfloor \times n_{c}
nH×nW×nc↓⌊sn+2p−f+1⌋×⌊sn+2p−f+1⌋×nc
其中,在池化过程中
p
p
p 通常为0.
3 全连接层:就是一般的神经网络层
4 经典卷积网络
经典结构:多层卷积层 - 池化层 - (Flatten后) 全连接层
如 Conv - Pool - Conv - Pool -Flatten - Fc - Fc - Softmax
一般来说,
n
H
,
n
W
n_{H}, n_{W}
nH,nW 会逐渐降低,
n
c
n_{c}
nc 会增多。
其中5表示有5层带权重的层。