那么如何计算output shape呢?这里我们把反卷积称之为卷积操作的转置。假设我们padding的方式是SAME,输入图像的size是 wi,hi,ci w i , h i , c i ,输入图像的size是 wo,ho,co w o , h o , c o 。filter的size是 fw,fh f w , f h 。stride的大小是 sw,sh s w , s h 。
co c o 是取决于filter的个数。 wo=wi∗sw w o = w i ∗ s w ho=hi∗sh h o = h i ∗ s h这里我们就疑惑了,为什么步长设置大了,反而得到的输出结果还变大了呢?
从理解角度来说,因为我们这里是将反卷积看作卷积的转置,所以我们可以把stride看成对应卷积操作的步长。比如说,我们通过卷积操作将 wo,ho w o , h o 变成了 wi,hi w i , h i ,这里的步长就是上述卷积操作的步长。从实现角度来讲,我们知道反卷积的本质还是卷积,他其实是在图像内部插入了许多0点,从而实现了步长大于1的操作。如下图所示,其中蓝色框中间的点就是插入的0点。其实内部反卷积的步长还是1,但是对应的卷积的步长就是2了。反卷积和卷积的动画
每个反卷积操作都可以看成一个卷积操作的转置,由于shape可以决定padding和stride的大小,我们的反卷积的padding 和stride大小和对应的卷积的padding和stride大小一致