代码之家  ›  专栏  ›  技术社区  ›  Iter Ator

如何在Tensorflow中使用conv1d\u转置?

  •  2
  • Iter Ator  · 技术社区  · 7 年前

    这个 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中实现一维反褶积?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Maxim    7 年前

    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)
    
        2
  •  2
  •   Talvalin    6 年前
    推荐文章