nn.Conv2d中padding详解【pytorch学习】

简述

在网上看了很多的解释,自己又大致的理解了一下之后明白了。

卷积

首先我们得明白什么是卷积。

但是由于我们这里只想要推理padding的大小,所以只会讨论这个大小的问题。

  • (n,n)和(n, n)的矩阵相乘,规模任然是(n, n)。
  • 我们知道,卷积的过程,其实是kernal在整体输入上的一个滑动的过程。
  • 首先我们得知道滑动的步长。(stride)
  • 推理这个公式其实非常简单。 (original_size - (kernal_size - 1)) / stride
  • 上面的公式现在还没有化简,但是其实非常容易理解的。就是原图删除掉(kernal-1)大小之后的区间除以stride后,向下整数。
  • 减去那个部分是为了避免越界。
  • 之后再除以步长,就是小学经典的,给定长度的路,再给定一个树之间的间距,来算能插入多少棵树的问题了。

上面的公式就给出了,经过一次卷积之后,生成的图的大小。


加上padding的卷积

上面部分其实是容易理解,加上padding有两个作用

padding的含义: 在四周加格子

1.使得整个图大小不会发生变化。

  • 如果留心上面的操作的话,会发现,只有当kernal=1并且stride=1的时候,新图的大小才能等于原始大小。否则只能更小。但是对于研究深度学习的人(调模型参数的菜鸡们),这个怎么可以容忍了,没有参数可以调了!!只能是1!那还搞什么啊!
  • 所以,加上了padding

加上padding之后,上面的公式就要发生修改了。

( O r i g i n a l S i z e − ( K e r n a l S i z e − 1 ) + 2 ∗ p a d d i n g ) / s t r i d e (OriginalSize - (KernalSize - 1) + 2 * padding) / stride (OriginalSize(KernalSize1)+2padding)/stride

因为padding如果是数值的话,表示的是两边都加。也就加了两遍的padding在origin的大小上,所以,就乘以2

2.使得整个图大小不会发生变化。

使得边缘的数据可以被用到。非常显然,这里的边缘数据都很少被用到的。

所以加上之后,扩充了整个图,让边缘的数据的用到次数得到提高。这样才能更好的得到整张图的特征。

实际上的公式

O u t p u t S i z e = I n p u t S i z e − K e r n a l S i z e + 2 ∗ P a d d i n g s t r i d e + 1 OutputSize = \frac{InputSize - KernalSize + 2 * Padding}{stride} + 1 OutputSize=strideInputSizeKernalSize+2Padding+1

非常奇怪,公式是这样的。
其实,当OutputSize这些都是2的倍数的时候,这个是没什么考虑的。
个人认为是考虑到有奇数的情况。但具体的我也没有经过数学推导证明过,如果有的话,欢迎大佬分享。

关于padding的数值

这里就引进了一个新的参数,那就是bias.

有兴趣的朋友可以自己查一查。

引用

https://blog.csdn.net/u012442157/article/details/78570505
https://pytorch.org/docs/stable/nn.html
https://blog.csdn.net/g11d111/article/details/82665265

  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值