tensorflow - tf.nn.conv2d_transpose 的填充有什么作用?

标签 tensorflow convolution deconvolution

众所周知,我们可以计算输出的形状 tensorconv2d 的填充模式,以及 algorithm很清楚,但我对 conv2d_transpose 很困惑,它是否填充输入张量然后调用 conv2d ?它在哪里转置过滤器或输入?如何根据填充模式计算输出张量的形状,SAMEVALIDconv2d_transpose ?

最佳答案

填充对于 conv2d_transpose 意味着什么?
'相同' 意味着简单地将输入形状乘以步幅。例如,如果输入形状的高度和宽度为 7,并且 conv2d_transpose 的 padding=same 和 strides=3,那么输出形状的高度和宽度将为 7x3 = 21。
“有效”几乎相同。从“SAME”开始,然后检查与步幅相比的 kernel_size。如果它更大,则将该数量添加到高度和宽度。为什么?因为当内核在图像上移动以进行卷积时(一次通过撞击量),最后一个内核将通过差异悬垂在图像上。想象一下上面的例子,输入高度和宽度为 7,这次 padding=valid,strides=3,kernel=5。输出高度和宽度将为 7x3 + (5-3)。
在这两种情况下,如果内核小于步幅,您只会在输出中得到很多零。为什么?考虑 stride 的作用...
对于给定的 stride 值,输入图像会增加很多倍。步幅为 3 会使输入图像的宽度和高度增加 3 倍。原始值占据每 3 位,其余填充为 !对于 padding=valid 有我们之前讨论过的额外内容。
kernel_size 是卷积核在图像上的大小,它在图像上按步幅移动。因此,如果 kernel_size 为 1 且步幅为 3,则您的输出大部分为零。
示例相同

>>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=3,padding='same',strides=2)
>>> conv2d_tr(np.zeros([3,2,2,4],dtype=np.float32)).numpy().shape

(3, 4, 4, 5)
示例 VALID(比步幅更大的内核)
>>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=3,padding='valid',strides=2)
>>> conv2d_tr(np.zeros([3,10,10,4],dtype=np.float32)).numpy().shape

(3, 21, 21, 5)
示例 VALID(内核等于或小于 stride)
>>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=2,padding='valid',strides=2)
>>> conv2d_tr(np.zeros([3,2,2,4],dtype=np.float32)).numpy().shape

(3, 20, 20, 5)
小内核步幅的示例零
>>> conv2d_tr = tf.keras.layers.Conv2DTranspose(1,kernel_size=1,padding='same',strides=2)
>>> conv2d_tr(np.ones([1,2,2,3],dtype=np.float32)).numpy().shape
(1, 4, 4, 1)

>>> conv2d_tr(np.ones([1,2,2,3],dtype=np.float32)).numpy()

array([[[[0.702],[0.   ],[0.702],[0.   ]],
        [[0.   ],[0.   ],[0.   ],[0.   ]],
        [[0.702],[0.   ],[0.702],[0.   ]],
        [[0.   ],[0.   ],[0.   ],[0.   ]]]], dtype=float32)

关于tensorflow - tf.nn.conv2d_transpose 的填充有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48486839/

相关文章:

python - 基于多个条件处理 numpy 数组的更有效方法是什么?

neural-network - 如何在卷积网络中使用 im2col 操作更有效?

python - 在 Tensorflow 中初始化批处理相关变量

TensorFlow:加载检查点,但只是其中的一部分(卷积层)

python - Tensorflow - 检索字符串张量中的每个字符

algorithm - 如何用卷积解决精确模式匹配

python - tensorflow conv2d_transpose : Size of out_backprop doesn't match computed

c++ - 使用opencv通过反卷积对图像进行去模糊

image - Tensorflow 中的动态图像裁剪

python - 尝试导入 tensorflow 时出现非法硬件指令