Ale*_*vic 21 convolution deep-learning conv-neural-network keras deconvolution
我注意到在很多地方人们使用这样的东西,通常是在完全卷积网络,自动编码器和类似的东西:
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))
Run Code Online (Sandbox Code Playgroud)
我想知道它之间的区别是什么?
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))
Run Code Online (Sandbox Code Playgroud)
我们欢迎任何解释这种差异的论文链接.
Mar*_*jko 24
在这里和这里你可以找到关于转换卷积如何工作的非常好的解释.总结这两种方法:
在第一种方法中,您首先对特征贴图进行上采样:
[[1, 2], [3, 4]] -> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
Run Code Online (Sandbox Code Playgroud)
然后你申请一个经典的卷积(如Conv2DTranspose
与stride=1
和padding='same'
等同于Conv2D
).
在您的第二种方法中,您首先联合(最大)汇集您的要素图:
[[1, 2], [3, 4]] -> [[1, 0, 2, 0], [0, 0, 0, 0], [3, 0, 4, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
然后应用经典卷积filter_size
,过滤器等.
有趣的事实是 - 尽管这些方法不同,但它们有一些共同之处.转置卷积意味着卷积梯度的近似,因此第一种方法是逼近sum pooling
而第二种max pooling
渐变.这使得第一个结果产生稍微平滑的结果.
您可能会看到第一种方法的其他原因是:
Conv2DTranspose
(及其等价物)相对较新,keras
因此执行可学习的上采样的唯一方法是使用Upsample2D
,keras
:Francois Chollet在他的一篇教程中使用了这种方法,keras
由于一些API
不一致,卷积看起来很糟糕. 归档时间: |
|
查看次数: |
5415 次 |
最近记录: |