第二课 卷积神经网络
卷积神经网络
- 输入层 H * W * C
- 卷积层 特征图大小由卷积核数量决定
- 池化层
- 全连接层
卷积层涉及参数
- 滑动窗口步长 S
- 卷积核尺寸 F
- 边缘填充 P
- 卷积核个数 n
卷积结果计算公式
H
2
=
H
1
−
F
H
+
2
P
S
+
1
W
2
=
W
1
−
F
W
+
2
P
S
+
1
H_2=\frac{H_1-F_H+2P}{S}+1\\ W_2=\frac{W_1-F_W+2P}{S}+1\\
H2=SH1−FH+2P+1W2=SW1−FW+2P+1
卷积参数共享
例:10个 5 ∗ 5 ∗ 3 5*5*3 5∗5∗3的卷积核参数为 10 ∗ ( 5 ∗ 5 ∗ 3 + 1 ) = 760 10*(5*5*3+1)=760 10∗(5∗5∗3+1)=760
池化层:压缩,降采样(一般选用maxpool)
整体网络架构
conv RELU conv RELU POOL ... FC
层数:conv
层数+FC
层数(带参数的才能计数)
感受野
例:3个 3 ∗ 3 3*3 3∗3的卷积核的感受野是 7 ∗ 7 7*7 7∗7,堆叠小的卷积核所需的参数更少一些,卷积过程越多,特征提取也会越细致
卷积网络模块构建
- 一般卷积层,RELU层,池化层可以写成一个套餐
nn.Conv2d(
in_channels,
out_channels,
kernel_size,
stride,
padding,
),
nn.RelU(),
nn.MaxPool2d(kernel_size=2)
如果希望卷积后图像大小不变,设置 p a d d i n g = ( k e r n e l _ s i z e − 1 ) / 2 i f s t r i d e = 1 padding=(kernel\_size-1)/2\quad if\quad stride=1 padding=(kernel_size−1)/2ifstride=1
- 最后还要加入全连接层
forward:x=x.view(x.size(0),-1)
结果为(batch_size, n ∗ H ∗ W n*H*W n∗H∗W)