卷积层的参数与FLOPS
在卷积层中,卷积核(也称为滤波器)是一个小的、可学习的矩阵,通常比输入图像的尺寸小得多。每个卷积核在输入图像上滑动(即进行卷积运算),在滑动过程中与输入图像的局部区域进行逐元素相乘并累加,生成一个特征图(Feature Map)。
一个卷积核:
- 通常指的是一个完整的卷积核,其包含对所有输入通道的权重矩阵。即一个卷积核在所有输入通道上应用其权重矩阵,生成一个输出通道。
多个卷积核:
- 输出通道数就是卷积核的个数,如果一个卷积层有多个输出通道(例如
out_channels=32
),那么有32
个卷积核,每个卷积核有对所有输入通道的权重矩阵。
对于一个卷积层而言,每个卷积核的权重是共享的,在所有输入通道上应用。
卷积核可以不是2维的:如果输入通道数为 3
,卷积核的维度是 (3, K, K)
,其中 K
是卷积核的空间尺寸(例如 3x3
)。
参数
一个卷积层的参数数量:
参数数量
=
(
输出通道数
×
输入通道数
×
卷积核宽度
×
卷积核高度
)
+
输出通道数的偏置项
参数数量=(输出通道数×输入通道数×卷积核宽度×卷积核高度)+输出通道数的偏置项
参数数量=(输出通道数×输入通道数×卷积核宽度×卷积核高度)+输出通道数的偏置项
输出通道数就是卷积核的个数。
输入通道数
×
卷积核宽度
×
卷积核高度
输入通道数×卷积核宽度×卷积核高度
输入通道数×卷积核宽度×卷积核高度是单个卷积核的参数。
conv_layer = nn.Conv2d(in_channels=3, out_channels=1, kernel_size=3, stride=1, padding=1)
# 28个参数 3x1x3x3+1,这个1是偏置
FLOPs
FLOPs(Floating Point Operations, 浮点运算次数)。在神经网络中,通常指的是batch_size为1时的浮点运算次数。
每个输出像素点的 FLOPs 计算公式为:
F
L
O
P
s
=
2
×
(
输入通道数
×
卷积核宽度
×
卷积核高度
)
FLOPs=2×(输入通道数×卷积核宽度×卷积核高度)
FLOPs=2×(输入通道数×卷积核宽度×卷积核高度)
2
×
2×
2×是先乘法运算,再加法运算。
对于卷积层,其 FLOPs 计算公式如下:
F
L
O
P
s
=
2
×
(
输入通道数
×
卷积核宽度
×
卷积核高度
×
输出特征图宽度
×
输出特征图高度
×
输出通道数
)
FLOPs=2×(输入通道数×卷积核宽度×卷积核高度×输出特征图宽度×输出特征图高度×输出通道数)
FLOPs=2×(输入通道数×卷积核宽度×卷积核高度×输出特征图宽度×输出特征图高度×输出通道数)
在这个公式中,输出特征图宽度和输出特征图高度直接取决于输入特征图的宽度和高度。