类似的内容非常多,只是想写一写当作复习,如果错误请指出,感谢大家的指点。
torch.nn.
Conv2d
(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
卷积层参数个数
假设in_channels = 5, out_channels = 6, 卷积核大小 3*3,其他参数默认
那么参数总数量为 (3*3*5+1)*6.
因为输入有5个通道,所以卷积核也会对应有5个通道再加上每个卷积核共享一个权重,这里提供了式子中 3*3*5+1的部分。
输出有6个通道,所以一共需要6个卷积核,最终参数数量就是(3*3*5+1)*6。
feature map大小
feature map的大小 取决于以下几点
输入图像尺寸大小
卷积核大小
padding 数量
stride 的步长
dilation 的间隔
这些参数的释义如果有疑惑可以参考下面的博客。
H和W的计算是对称的,所以这里只讨论W就足够了。
下图是一个5*5的矩阵和它在3*3权重全为1的卷积核下卷积的结果。默认情况下,P=0,S=1,卷积核从左往右挪动,到红框这个位置就得停下来。此时很容易可以看出卷积核只能移动 W-FW+1次,所以宽度当然就是 W-FW+1。
padding相当于延长了H和W,因为padding在上,下,左,右四个方向都会有添加,所以padding带来的影响是双倍的。所以考虑padding之后宽度是 W+2P-FW+1。
接下来考虑S,从上面的讨论中,卷积核最多只能移动到原图像的第 W+2P-FW+1列。当步长为1时,移动的次数为 W+2P-FW 次(从1到x一共x-1个间隔),而feature map的宽度为移动次数+1。步长为S时 移动的次数就要相应的除以S,最终再加上1就是生成的feature map的宽度。
dilation 增大了卷积核在原图像上的采样间隔,实际上也就是增大了卷积核的大小。
上图中方格表示dilation=1(即没有间隔)时的卷积核在原图像对应的采样点,小圆圈表示dilation为x时插入的x-1个间隔。当卷积核宽度为FW时,插入的间隔数量一共为 (FH-1)*(dilation-1)。这也就相当于将FH增大了这么多。