【问题标题】:How to use the conv1d_transpose in Tensorflow?如何在 Tensorflow 中使用 conv1d_transpose?
【发布时间】:2017-11-04 01:03:19
【问题描述】:

conv1d_transpose 尚未出现在 Tensorflow 的稳定版本中,但有一个可用的实现 on 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_1的形状是TensorShape([Dimension(None), Dimension(None), Dimension(None)]),但应该是[-1,1024,8]

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

【问题讨论】:

    标签: python tensorflow machine-learning convolution convolutional-neural-network


    【解决方案1】:

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

    • output_shape需要静态知道batch size,不能通过-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)
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 2019-02-20
        • 2017-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        • 2019-09-09
        • 1970-01-01
        相关资源
        最近更新 更多