【Tensorflow】反卷积是如何实现的

本文深入探讨了TensorFlow中反卷积(Transposed Convolution)的实现原理,特别是输出尺寸的计算方法,包括在不同padding模式下如何调整输入与输出尺寸。同时,对比了PyTorch框架中反卷积的简化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:tensorflow是指定了output_shape的,但是keras的output是计算出来的,所以keras的具体输出形状还是得打印出来看了才能知道,或者自己到相应的计算函数中查看。

tensorflow反卷积是如何实现的?

卷积的输出尺寸:

tensorflow官方是这么写的,

其中,VALID时的padding数为:

如果p为奇数就是左奇右偶填充。

反卷积判断输出尺寸是否正确也可以根据以上卷积的公式进行计算,只不过输入输出要互换。

另一点需要注意的点反卷积的filter尺寸输入输出要互换。即卷积[h,w,in,out]反卷积[h,w,out,in]

要想我们按照这种方法求得的结果和输入tf.nn.conv2d_transpose()函数的结果是一样的,需要对卷积核翻转180。

问题:反卷积的时候padding方式不同,具体是如何实现的?以及如何crop的问题

因为网上大多数是针对padding=SAME的情况,而padding=VALID的情况没有找到很好的解释。

经过一天的实验,总结以下

在input之间补s-1个0,再在最外圈补f-1圈0.

SAME时,从output裁剪处output大小的矩阵来,而VALID时,如果输出的矩阵比要求的小,需要在最后一列和最后一行补0。

(一般情况下VALID的输出矩阵会比SAME的要大)

而以上的这些烦恼在pytorch中就不复存在了。pytorch大法好!

nn.ConvTranspose2d(self, in_channels, out_channels, kernel_size, stride=1,
             padding=0, outputpadding=0, groups=1, bias=True, dilation=1)

输出直接可以根据公式求得,还不会出现tensorflow里那种输出尺寸可能会不确定所以必须得指定output_shape。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值