【问题标题】:the Keras layers(functions) corresponding to tf.nn.conv2d_transpose与 tf.nn.conv2d_transpose 对应的 Keras 层(函数)
【发布时间】:2017-02-09 18:23:30
【问题描述】:

Keras中,Tensorflow中的tf.nn.conv2d_transpose对应的层(函数)是什么?我曾经看到我们可以Just use combinations of UpSampling2D and Convolution2D as appropriate的评论。对吗?

在下面的两个例子中,都使用了这种组合方式。

1) 在Building Autoencoders in Keras中,作者构建解码器如下。

2) 在u-uet implementation 中,作者如下构建反卷积

up6 = merge([UpSampling2D(size=(2, 2))(conv5), conv4], mode='concat', concat_axis=1)
conv6 = Convolution2D(256, 3, 3, activation='relu', border_mode='same')(up6)
conv6 = Convolution2D(256, 3, 3, activation='relu', border_mode='same')(conv6)

【问题讨论】:

    标签: python tensorflow neural-network deep-learning keras


    【解决方案1】:

    Keras 中对应的层为Deconvolution2D 层。

    值得一提的是,您应该非常小心它们,因为它们有时可能会以意想不到的方式表现。我强烈建议您在开始使用此层之前阅读this Stack Overflow 问题(及其答案)。

    更新:

    1. 反卷积是最近才添加的层 - 也许这就是人们建议您使用 Convolution2D * UpSampling2D 的原因。
    2. 因为它相对较新 - 在某些情况下可能无法正常工作。它还需要一些经验才能正确使用它们。
    3. 事实上 - 从数学的角度来看 - 每个反卷积都可能表示为 Convolution2DUpSampling2D 的组合 - 所以也许这就是您提供的文本中提到它的原因。

    更新 2:

    好的。我想我找到了一个简单的解释,为什么Deconvolution2D 可能以Convolution2DUpSampling2D 的组合形式呈现。我们将使用Deconvolution2D 是某个卷积层的梯度的定义。让我们考虑三种最常见的情况:

    1. 最简单的是Convolutional2D,没有任何池。在这种情况下——因为它是线性运算——它的梯度本身就是一个函数——所以Convolution2D
    2. 更棘手的是Convolution2DAveragePooling 的渐变。所以:(AveragePooling2D * Convolution2D)' = AveragePooling2D' * Convolution2D'。但是AveragePooling2D = UpSample2D * constant 的梯度 - 所以在这种情况下,介词为真时也是如此。
    3. 最棘手的是MaxPooling2D。在这种情况下仍然是(MaxPooling2D * Convolution2D)' = MaxPooling2D' * Convolution2D'MaxPooling2D' != UpSample2D。但是在这种情况下,人们可以很容易地找到一个简单的Convolution2D,这使得MaxPooling2D' = Convolution2D * UpSample2D(直观地说——MaxPooling2D 的梯度是一个零矩阵,它的对角线上只有一个 1。因为Convolution2D 可能表示矩阵运算——它也可以表示从单位矩阵到MaxPooling2D梯度的注入)。所以: (MaxPooling2D * Convolution2D)' = UpSampling2D * Convolution2D * Convolution2D = UpSampling2D * Convolution2D'

    最后一点是证明的所有部分都表明Deconvolution2DUpSampling2DConvolution2D 的组合,而不是相反。可以很容易地证明,UpSampling2DConvolution2D 的组合形式的每个功能都可以很容易地以 UpSampling2DConvolution2D 的组合形式呈现。所以基本上 - 证明已经完成:)

    【讨论】:

    • 嗨,Marcin,感谢您的回复。让我感到困惑的是,在其他一些情况下,还有基于“上采样”和“卷积2D”组合的实现,旨在达到类似的目标。Deconvolution2D 和这种组合有什么区别?我已经更新了我的原始帖子,包括提到的例子。
    • 谢谢,所以我可以安全地假设它们在数学上是等价的吗?对此有任何数学推导吗?谢谢。
    • 相当乏味。我在写答案时为自己证​​明了这一点,但我找不到这个证明的书面版本。如果你真的想 - 我可以在对话中写这个,或者在文章中寻找更长时间的这个证明的版本。
    • 嗨,Marcin,非常感谢您非常详细的回答。
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多