2

conv1d_transpose尚未在 Tensorflow 的稳定版本中,但在 github 上提供了一个实现

我想创建一个一维反卷积网络。输入的形状是[-1, 256, 16],输出应该是[-1,1024,8]。内核的大小为 5,步幅为 4。

我尝试使用此函数构建一维卷积层:

    (output_depth, input_depth) = (8, 16)
    kernel_width = 7
    f_shape = [kernel_width, output_depth, input_depth]
    layer_1_filter = tf.Variable(tf.random_normal(f_shape))

    layer_1 = tf_exp.conv1d_transpose(
        x,
        layer_1_filter,
        [-1,1024,8],
        stride=4, padding="VALID"
    )

的形状layer_1TensorShape([Dimension(None), Dimension(None), Dimension(None)]),但应该是[-1,1024,8]

我错了什么?如何在 Tensorflow 中实现一维反卷积?

4

2 回答 2

3

拉取请求目前是开放的,因此 API 和行为可以并且可能会改变。conv1d_transpose不支持人们可能期望的某些功能:

  • output_shape需要静态知道批量大小,不能通过-1
  • 另一方面,输出形状是动态的(这解释了None维度)。

此外,kernel_width=7期望in_width=255,不是256。应使kernel_width小于4匹配in_width=256。结果是这个演示代码:

x = tf.placeholder(shape=[None, 256, 16], dtype=tf.float32)
filter = tf.Variable(tf.random_normal([3, 8, 16]))    # [kernel_width, output_depth, input_depth]
out = conv1d_transpose(x, filter, output_shape=[100, 1024, 8], stride=4, padding="VALID")

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  result = sess.run(out, feed_dict={x: np.zeros([100, 256, 16])})
  print(result.shape)  # prints (100, 1024, 8)
于 2017-11-04T13:14:39.457 回答
2

新的tf.contrib.nn.conv1d_transpose现在已添加到Tensorflow API r1.8中。

于 2018-05-28T15:15:34.380 回答