gpt4 book ai didi

tensorflow - 如何理解tensorflow中的conv2d_transpose

转载 作者:行者123 更新时间:2023-12-04 10:41:18 25 4
gpt4 key购买 nike

下面是conv2d_transpose的测试。

import tensorflow as tf
import numpy as np
x = tf.constant(np.array([[
[[-67], [-77]],
[[-117], [-127]]
]]), tf.float32)

# shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
f = tf.constant(np.array([
[[[-1]], [[2]], [[-3]]],
[[[4]], [[-5]], [[6]]],
[[[-7]], [[8]], [[-9]]]
]), tf.float32)

conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 5, 5, 1), strides=[1, 2, 2, 1], padding='VALID')

结果:
tf.Tensor(
[[[[ 67.]
[ -134.]
[ 278.]
[ -154.]
[ 231.]]

[[ -268.]
[ 335.]
[ -710.]
[ 385.]
[ -462.]]

[[ 586.]
[ -770.]
[ 1620.]
[ -870.]
[ 1074.]]

[[ -468.]
[ 585.]
[-1210.]
[ 635.]
[ -762.]]

[[ 819.]
[ -936.]
[ 1942.]
[-1016.]
[ 1143.]]]], shape=(1, 5, 5, 1), dtype=float32)

据我了解,它应该按照 doc 中图 4.5 中的描述工作。

因此,第一个元素 (conv[0,0,0,0]) 应该是 -67*-9=603。为什么结果是67?

结果可以用下图解释: enter image description here .但是为什么卷积核是逆的呢?

最佳答案

为了最好地解释,我做了一个 draw.io图来解释您获得的结果。 enter image description here

我想上面的插图可能有助于解释 transpose conv 的第一个元素的原因。特征图是 67 .

需要注意的一个关键点:

  • 与传统卷积不同,在转置卷积中,滤波器的每个元素都与输入特征图的一个元素相乘,并且这些单独乘法和中间特征图的结果相互叠加以创建最终的特征图。 stride确定叠加层相距多远。在我们的例子中,stride = 2,因此过滤器在 x 中移动了 2 & y与原始下采样特征图每次卷积后的维度。
  • 关于tensorflow - 如何理解tensorflow中的conv2d_transpose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59919006/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com