最近我一直试图理解张量流tf.nn.conv2d_transpose
,但是我很难理解它的输入参数。它被定义为:
tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding='SAME')
例如,我们假设我的图片尺寸为[batch_size, 7, 7, 128]
,并希望将其转换为[batch_size, 14, 14, 64]
。然后output_shape=[batch_size, 14, 14, 64]
,strides=[2,2]
,但我无法弄清楚如何获得滤镜的形状。有什么想法吗?
此外padding="SAME"
如何适用于conv2d_transpose
?它是应用于输出图像还是输入?
答案 0 :(得分:0)
关于过滤器形状的第一个问题,我使用面向对象的版本tf.layers.Conv2DTranspose
并查看kernel
属性以找出过滤器形状:
>>> import tensorflow as tf
>>> l = tf.layers.Conv2DTranspose(filters=64, kernel_size=1, padding='SAME', strides=[2, 2])
>>> l(tf.ones([12, 7, 7, 128]))
<tf.Tensor 'conv2d_transpose/BiasAdd:0' shape=(12, 14, 14, 64) dtype=float32>
>>> l.kernel
<tf.Variable 'conv2d_transpose/kernel:0' shape=(1, 1, 64, 128) dtype=float32_ref>
>>>
在第二个填充问题上,conv2d_transpose
计算conv2d
的渐变。由于conv2d
填充其输入,conv2d_transpose
需要填充其输出以适合渐变。