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在他的例子中介绍了这种用法。

        这里也是对它的解释