【问题标题】:Understanding basic Keras Conv2DTranspose example了解基本的 Keras Conv2DTranspose 示例
【发布时间】:2020-03-21 00:37:18
【问题描述】:

这绝对是一个基本问题,但我很难理解 Keras 的 layers.Conv2DTranspose 函数到底发生了什么。我有以下三行:

设置

model = tf.keras.Sequential()
...
model.add(layers.Reshape((10, 10, 256)))
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 10, 10, 128)

第一次出现的 Reshape 得到了一个形状为 [10x10x256] 的张量。

Conv2DTranspose 层中,不知何故,我沿着这个张量滑动了一个形状为 [5x5] 的过滤器,最终得到了一个形状为 [10x10x128] 的新张量。

问题

从第一个张量 [10x10x256] 到第二个 [10x10x128] 的数学上发生了什么?

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    它与卷积几乎相同,但带有花哨的填充以获得反向卷积的感觉。

    图片中的滑动窗口位置正确。
    但它不是一个“窗口”,它实际上是一个“滑块”。块的大小为 256 深度。

    因此,它对每个步幅的所有通道进行乘法和求和。

    但是有 128 个不同的滑块(正如您在层中使用 filters=128 定义的那样)。这 128 个滑块中的每一个都产生单独的输出通道。


    关于转置卷积的精彩解释:https://datascience.stackexchange.com/questions/6107/what-are-deconvolutional-layers

    【讨论】:

    • 谢谢丹尼尔!只是为了确保我遵循:所以滑块 [5x5] 的每一层都乘以整个体积的 5x5 部分,然后在每个位置对层求和?这是用完全 128 个不同的过滤器完成的?
    • 滑动块是 [5x5x256] 它是“元素级”乘以它所在的相应部分,所有元素级乘法的结果都汇总为一个像素。有 128 个不同的块,因此对于每个位置,您有 128 个不同的结果像素。 ---- 过滤器内部的形状为(5,5,256,128),但“过程”如上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多