卷积 - 2. 常规2D卷积 代码和解释

1.  Pytorch代码

对于卷积里,pytorch代码非常简单,看 Conv2d PyTorch 1.10.0 非常足够!但我也想对其中的部分进行更多一点的解释

卷积 - 2. 常规2D卷积 代码和解释

  • in_channels (int) – 输入图片 / 特征的通道数 

  • out_channels (int) – 输出特征的通道数

  • kernel_size (int or tuple) – 卷积核的大小 (比如 int:3,代表 size 3 × 3)

  • stride (int or tupleoptional) – 上一篇文章中,卷积核的每一步的移动步长 (默认是1)

  • bias (booloptional) – 可学习偏执,如果是Ture,则在最后的输出特征每个通道的每个元素加上这个偏执项。( 默认:True)

  • dilation (int or tupleoptional) – 卷积核内部像素之间的距离. (默认: 1)

  • groups (intoptional) – 分组,(默认: 1) 后面的文章-分组卷积时单独去讲 


上述的参数都是易懂的,且很好理解的,我重点介绍和解释下面的几个参数: 

padding  (inttuple or stroptional) : 在讲这个参数之前,首先要明确和解决的几个问题是

1. 为什么会存在padding?答:如下图当stride是2的时候,此时卷积核对应的像素值已经为null了,所以要在null处补值。

卷积 - 2. 常规2D卷积 代码和解释

2. padding是在卷积前补还是之后补?补充的值是什么?

padding是在卷积前面补充,默认是0。例如:当padding = 1, 则在卷积前的特征上下左右均补1行0,当padding = (1, 2) 则在上下补1行0,左右补2行0。可以通过torch.nn.Functional.pad来补非0的值。

2. 输出特征计算

输出的特征计算,是通过上面的几个参数得到的,具体的计算公式可以看官网,下面贴出来:

卷积 - 2. 常规2D卷积 代码和解释

 我们通过代码来展示一下:假设我们input 为(6, 3, 100, 200) , in_channel = 3, out_channels = 16, kernel_size = 3, padding = 1, stride = (2, 1) 那我们最后通过程序得到的输出:

卷积 - 2. 常规2D卷积 代码和解释 卷积 - 2. 常规2D卷积 代码和解释

 经验算,是符合上面公式的!好的,今天讲解就到这里,有问题就留言!下课!

上一篇:EgretPro——从入门到入坑


下一篇:Unity3D 开发一套2d游戏的记录