AI面试题之(反)卷积输出尺寸计算

1 给我背住

【卷积计算公式】

output=\frac{input+2*padding-kernel}{stride}+1

【反卷积计算公式】

output=stride*(input-1)+2*padding-kernel+2

【其实只用记住卷积的计算公式就行了,反卷积的可以从卷积中的推导出来】

2 为什么是这样算

2.1 卷积

其实晚上很多都是仅仅告诉你,计算公式是:

output=\frac{input+2*padding-kernel}{stride}+1

这里简单的来讲解一下为什么。

input+2*padding

】这个就是原来的图片,外面加了一圈padding,因为padding是一圈,所以左右、上下都有,所以是两倍的。

input+2*padding-kernel

】是计算kernel要走多少步。来举个例子就好理解了:

图中是input为7,然后kernel_size为3,podding是1的一个例子。从下图中可以看出来,kernel总共要走6步

这个六步,就是

input+2*padding-kernel

的含义,kernel要滑动的步数。

那么stride就是步长,如果是2的话,那么kernel移动就是这样的(如下图):

就变成3步了。那么为什么计算公式最后还要加上1呢?就是在kernel还没有迈出步子的时候,最开始的处于左上角的那个位置,也是一个点。

【总结:卷积输出尺寸计算的时候,前面的分式,就是计算卷积核可以走几步,然后再加上卷积核的初始位置,就是输出尺寸了】


来看个正经的例子:

【这个例子展示了,如果输入尺寸是一个偶数,卷积核是奇数的情况,如何计算——向下取整】

2.2 反卷积

其实反卷积就是另外一种形式的卷积。

反卷积中,stride就是在相邻元素之间添加stride-1个0元素

从图中可以看到,假设输入图片是3*3的,假设反卷积的stride为2,那么输入图像其实就是5*5的。

所以,实际的输入图像应该是:

input'=input+(stride-1)(input-1)

剩下的内容就和之前一样了,执行卷积的过程,不过反卷积的stride是用在扩展输入图像上的,而不是kernel移动的步长,所以反卷积中kernel步长永远是1.

所以计算公式如下,先把

output=input'+2*padding-kernel+1

带入

input'=input+(stride-1)(input-1)

得到:

output = stride(input-1)+2*padding-kernel+2

【总结:反卷积中,就是先扩展输入input的尺寸,然后再去卷积】

2.3 两个例题

输入尺寸input=2,kernel_size=3,stride=1,padding=2,计算反卷积的输出尺寸?

【答案:output=4】


输入尺寸input=3,kernel=3,stride=2,padding=1,计算反卷积的输出尺寸?

【答案:output=5】

喜欢的话,长按下面的二维码关注下【机器学习炼丹术】,成为炫酷的炼丹师吧!公众号中回复【下载】有免费的精选的机器学习相关的学习资料哦,并且持续更新!