1.卷积神经网络
1.互相关运算(cross-correlation)
输入 * 核函数 = 输出
n
k
×
n
w
n_k \times n_w
nk×nw
k
h
×
k
w
k_h \times k_w
kh×kw
输出:
(
n
k
−
k
h
+
1
)
×
(
n
w
−
k
w
+
1
)
(n_k - k_h + 1) \times (n_w - k_w + 1)
(nk−kh+1)×(nw−kw+1)
2.填充padding 和步幅stride
padding
通常,如果添加
p
h
p_h
ph行填充(大约一半在顶部,一半在底部)和
p
w
p_w
pw列填充(左一半,右一半),则输出形状为:
(
n
h
−
k
h
+
p
h
+
1
)
×
(
n
w
−
k
w
+
p
w
+
1
)
(n_h - k_h + p_h + 1) \times (n_w - k_w + p_w + 1)
(nh−kh+ph+1)×(nw−kw+pw+1)
许多情况下, 设置
p
h
=
k
h
−
1
p_h = k_h -1
ph=kh−1和
p
w
=
k
w
−
1
p_w = k_w - 1
pw=kw−1使输入和输出具有相同的高度和宽度
pytorch 中 padding = (
p
h
/
2
p_h /2
ph/2,
p
w
/
2
p_w /2
pw/2)
stride
通常,当垂直步幅为
s
h
s_h
sh,水平步幅为
s
w
s_w
sw时,输出形状为
[
(
n
h
−
k
h
+
p
h
+
s
h
)
/
s
h
]
×
[
(
n
w
−
k
w
+
p
w
+
s
w
)
/
s
w
]
[(n_h - k_h + p_h + s_h) / s_h] \times [(n_w - k_w + p_w + s_w) / s_w]
[(nh−kh+ph+sh)/sh]×[(nw−kw+pw+sw)/sw]
实践中通常 p h = p w p_h = p_w ph=pw和 s h = s w s_h = s_w sh=sw
3.多输入/多输出通道
多输入通道:
每个通道输入的二维张量和卷积核的二维张量进行互相关计算,再对通道求和得到二维张量
多输出通道:
(多输入通道的情况下)为每一个输出通道创建一个 c i × k h × k w c_i \times k_h \times k_w ci×kh×kw的卷积核张量,即卷积核的形状: c 0 × c i × k h × k w c_0 \times c_i \times k_h \times k_w c0×ci×kh×kw
4.汇聚层
减低卷积层对位置的敏感性,同时减低对空间降采样表示的敏感性
最大汇聚层 maximum pooling / 平均汇聚层 average pooling
填充、步幅、多个通道
5. LeNet
LetNet(-5)由两个部分组成:
卷积编码器:2个卷积层组成
全连接层密集块:3个全连接层组成
2.现代卷积神经网络
AlexNet, VGG, NiN, GoogLeNet, ResNet, DenseNet