1. Pytorch代码
对于卷积里,pytorch代码非常简单,看 Conv2d PyTorch 1.10.0 非常足够!但我也想对其中的部分进行更多一点的解释
-
in_channels (int) – 输入图片 / 特征的通道数
-
out_channels (int) – 输出特征的通道数
-
kernel_size (int or tuple) – 卷积核的大小 (比如 int:3,代表 size 3 × 3)
-
stride (int or tuple, optional) – 上一篇文章中,卷积核的每一步的移动步长 (默认是1)
-
bias (bool, optional) – 可学习偏执,如果是Ture,则在最后的输出特征每个通道的每个元素加上这个偏执项。( 默认:True)
-
groups (int, optional) – 分组,(默认: 1) 后面的文章-分组卷积时单独去讲
上述的参数都是易懂的,且很好理解的,我重点介绍和解释下面的几个参数:
- padding (int, tuple or str, optional) : 在讲这个参数之前,首先要明确和解决的几个问题是
1. 为什么会存在padding?答:如下图当stride是2的时候,此时卷积核对应的像素值已经为null了,所以要在null处补值。
2. padding是在卷积前补还是之后补?补充的值是什么?
padding是在卷积前面补充,默认是0。例如:当padding = 1, 则在卷积前的特征上下左右均补1行0,当padding = (1, 2) 则在上下补1行0,左右补2行0。可以通过torch.nn.Functional.pad来补非0的值。
2. 输出特征计算
输出的特征计算,是通过上面的几个参数得到的,具体的计算公式可以看官网,下面贴出来:
我们通过代码来展示一下:假设我们input 为(6, 3, 100, 200) , in_channel = 3, out_channels = 16, kernel_size = 3, padding = 1, stride = (2, 1) 那我们最后通过程序得到的输出:
经验算,是符合上面公式的!好的,今天讲解就到这里,有问题就留言!下课!