深度学习 | 反卷积/转置卷积 的理解 transposed conv/deconv

1.深度学习 | 反卷积/转置卷积 的理解 transposed conv/deconv

https://blog.youkuaiyun.com/u014722627/article/details/60574260

2.关于tensorflow中转置卷积使用的理解

https://blog.youkuaiyun.com/silence2015/article/details/78649734

3.https://www.zhihu.com/question/43609045

作者:小华仔
链接:https://www.zhihu.com/question/43609045/answer/150012768
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

很多人上来就说 Deconvolution 不对,应该叫什么什么,balabala,这些都已经看的都想骂人了(不是不尊敬答题人,只是有卵用?还是不理解 Deconvolution 的工作方式)。是的是的,你说的都对,但是我还是不理解啊啊啊啊啊啊啊啊啊啊啊!!!!!

大家也都知道了这里的 Deconvolution 不是信号处理中的 Deconvolution(把convolution处理过的信号,尽最大可能的还原回去),这里只是想说明 Convolution 把图片变小,为了完成某些任务需要把图片再变大回去,所以叫 Deconvolution(因为 Convolution 的叫法本身也是错误的),从这个角度理解,我认为这种叫法也是可以说得通的(取 Deconvolution 这中叫法的人肯定想对那些说这种叫法不合理的人说:你们就不知道意会吗,非要从代码实现上来说吗?!)。

大多数人所说的更合适的叫法是 Transposed Convolution,有两个原因:

  1. 它就是 Convolution Network 的一种镜像,所以叫 Transposed Convolution。
  2. 从代码实现上,他就是把 filter 取了转置(Transpose),而这种做法又跟 backwards propagation 的代码实现一样,所以又叫 Backwards Convolution。这两种叫法都与代码实现上有很大很大的关系。

 

这个 Convolution arithmetic,大家也都已经刚看过了。

看过这些动图之后,想必很多人都认为 Transposed Convolution 就是卷积,答案是对的。就是 pad(通常用 0 进行 pad),然后进行卷积。

但是这种做法效率不高,怎么办?习惯性想到:转化为矩阵乘积的方式。怎么转?把 filter 取转置就行了(数学角度的正确性证明这里不说了,那么多公式矩阵也不会有多少人看,你可用个例子看一下,有助于理解),你会发现这与进行pad,然后卷积的做法是一致的。代码实现上 Deconvolution 就是这么干的。

注意1:这里的 filter 是变形后的 filter,不是最原始的 filter,这一点很重要!!!!可以看得票最高的那个回答。

注意2: Deconvolution Network 部分的 filter 可以不是前面 Convolution Network 部分学习到的取转置后的 filter,在 Deconvolution Network 部分可以自己学习新的 filter (原始 filter 的大小与前面 Convolution Network 对应层的 filter 的大小保持一致,但是在代码实现时,变形后的 filter 的大小,是前面 Convolution Network 对应层的变形后的 filter大小的转置(绕,比如 Convolution Network 部分是4 X 16,这里就是16 X 4)。

 

当然,这也是我个人理解,如有错误,还请各位大神不吝赐教,非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值