Deep learning 使用步幅转置卷积执行上采样与仅使用步幅1执行转置卷积有什么区别?
我注意到,在很多地方,人们使用类似的东西,通常是在完全卷积网络、自动编码器和类似的系统中:Deep learning 使用步幅转置卷积执行上采样与仅使用步幅1执行转置卷积有什么区别?,deep-learning,keras,conv-neural-network,convolution,deconvolution,Deep Learning,Keras,Conv Neural Network,Convolution,Deconvolution,我注意到,在很多地方,人们使用类似的东西,通常是在完全卷积网络、自动编码器和类似的系统中: model.add(UpSampling2D(size=(2,2))) model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1)) 我想知道这和简单的: model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2)) 欢迎链接到任何解释这种
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))
我想知道这和简单的:
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))
欢迎链接到任何解释这种差异的论文。你可以找到一个关于转置卷积如何工作的非常好的解释。总结这两种方法:
[[1, 2], [3, 4]] -> [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
然后应用经典卷积(如conv2dtranpse
与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]]
然后应用一个经典的卷积运算,包括过滤器大小
,过滤器等
和池
,而第二种方法是最大池
梯度。这会使第一个结果产生稍微平滑的结果
您可能会看到第一种方法的其他原因有:
(及其等价物)在Conv2DTranspose
中相对较新,因此执行可学习上采样的唯一方法是使用keras
Upsample2D
- 《凯拉斯》(keras)一书的作者——弗朗索瓦·乔利特(Francois Chollet)在他的教程中使用了这种方法
- 在过去相当于转置的情况下,卷积在
中由于一些keras
的不一致性而工作得很糟糕API
- 我只想指出你提到的几件事
Upsample2D
不是一个可学习的层,因为实际上有0个参数
此外,我们无法证明为什么我们可能要使用第一种方法,因为Francoise Chollet在他的例子中介绍了这种用法。这里也是对它的解释