卷积层
卷积的本质是用卷积核的参数来提取数据的特征,通过矩阵点乘运算与求和运算来得到结果。
下面给出一个基本的二维卷积的运算过程,即 y = ω x + b y = \omega x + b y=ωx+b
- 特征图 ( x x x) 的大小为 1 x 5 x 5, 输入的通道数为 1.
- 卷积核 ( ω \omega ω) 大小为 3 x 3
- 偏置(
b
b
b)为 1
为了保证输入的维度和输出的维度一致,还需要填充 (padding) 这里使用的 zeros-padding, 即用 0 来填充
使用 Pytorch 实现 卷积计算
import torch
import torch.nn as nn
conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=1, dilation=1, groups=1, bias=True)
Conv2d() 的参数介绍
- in_channels: 输入特征图的通道数,如何是 RGB 图像, 则通道数为 3. 卷积中的特征图通道数一般是 2 的整数次幂.
- out_channels: 输出特征图的通道数
- kernel_size: 卷积核的尺寸,常见的有 1、3、5、7.
- stride: 步长,即卷积核在特征图上滑动的步长,一般为 1. 如果大于 1,则输出特征图的尺寸会小于输入的特征图尺寸.
- padding: 填充,常见有 0 填充,边缘填充等,Pytorch 默认零填充
- dilation:空洞卷积,当大于 1 时可以增大感受野的同时保持特征图的尺寸, 默认为 1
- groups:可实现组卷积,即在卷积操作时不是逐点卷积,而是将输入通达分为多个组,稀疏连接达到降低计算量的目的.
- bias: 是否需要偏置, 默认 True
总结:
- 输入数据体的尺寸是 W 1 × H 1 × D 1 W_1 \times H_1 \times D_1 W1×H1×D1
- 4 个超参数: 滤波器的数量 K,滤波器空间尺寸 F,滑动步长 S,零填充的数量 P.
- 输出数据体的尺寸是
W
2
×
H
2
×
D
2
W_2 \times H_2 \times D_2
W2×H2×D2,其中
W 2 = W 1 − F + 2 P S , H 2 = H 1 − F + 2 P S + 1 , D 2 = K W_2 = \frac{W_1 - F + 2P}{S},H_2 = \frac{H_1-F+2P}{S} + 1, D_2 = K W2=SW1−F+2P,H2=SH1−F+2P+1,D2=K - 由于参数共享,每个滤波器包含的权重数目为 F × F × D 1 F \times F \times D_1 F×F×D1,卷积层一共有 F × F × D 1 × K F \times F \times D_1 \times K F×F×D1×K 个权重和 K K K 个偏置.
- 在输出的数据中第 d d d 个深度切片 (空间尺寸是 W 2 × H 2 W_2 \times H_2 W2×H2) 用第 d d d 个滤波器和输入数据进行有效卷积运算的解雇再加上 d d d 个偏置.