tf.nn.conv2d_transpose用paddle来实现遇到的一些问题
Created by: shaofeifei11
paddle版本:1.8.1
tensorflow代码:
a = tf.nn.conv2d_transpose(value=input1, filter=filter1, name="Model_Encoder_Layer_deconv_final3", output_shape=[8, 1, tf.shape(r1)[1], 256], strides=[1, 1, 4, 1], padding='SAME') 其中 input1.shape = [8, 1, ?, 256], filter1.shape = [1, 3, 256, 256]
然后我用 paddle的conv2d_transpose方法实现上述功能
方法1:
b = fluid.layers.conv2d_transpose(input=input2, num_filters=256, filter_size=[1, 3], padding="SAME", stride=(1, 4), data_format="NHWC", name="Model_Encoder_Layer_deconv_final3", bias_attr=False) 其中 input2.shape = [8, 1, -1, 256], 与tensorflow中的数据结构一致,都是 NHWC 结构
方法1 结果:tensorflow中的a 与 paddle 中的b 他们的shape,在dim=2的值不同。
方法2:
b = fluid.layers.conv2d_transpose(input=input2, num_filters=256, filter_size=[1, 3], padding="SAME", stride=(1, 4), data_format="NHWC", name="Model_Encoder_Layer_deconv_final3", bias_attr=False) 其中 input2.shape = [8, 1, -1, 256], 与tensorflow中的数据结构一致,都是 NHWC 结构 c = fluid.layers.crop_tensor(b, [8, 1, fluid.layers.shape(r1)[1], 256]) 其中 tensorflow中的r1与paddle中的r1是相同的数据
方法2 结果:报错
paddle官网中有他们之间的对比,
https://github.com/PaddlePaddle/X2Paddle/blob/master/tensorflow2fluid/doc/tf.nn.conv2d_transpose.md
但是它有两点与我的问题不同,第一个是output_size我的是tensor。是可变变量,而例子中是固定的。第二个是,它没有用 NHWC 格式,它使用的是 NCHW格式。因为我是将整个tensorflow的项目转成paddle,所以我一直使用的是 NHWC格式