Tensorflow python:使用特定顺序将输入[batchsize]重新整形为tensor [batchsize,2]

时间:2018-06-17 18:44:43

标签: python tensorflow reshape tensor

我有一个张量(shape = [batchsize])。我想以特定的顺序重塑张量并变成形状= [ - 1,2]。但我希望:

  1. [0,0]
  2. 处的元素
  3. 元素在[1,0]
  4. [0,1]
  5. 处的元素
  6. [1,1]
  7. 处的元素
  8. [0,2]
  9. 处的元素
  10. [0,3]
  11. 处的元素
  12. 元素在[2,1]
  13. [3,1]处的元素,以及未知批量大小。
  14. 这是一个示例代码,其张量范围=(0到输入= 8)。

    import tensorflow as tf
    import numpy as np
    
    batchsize = tf.placeholder(shape=[], dtype=tf.int32)
    x = tf.range(0, batchsize, 1) 
    x = tf.reshape(x, shape=[2, -1])
    y = tf.transpose(x)
    z = tf.reshape(y, shape=[-1, 2])
    
    
    input = 8
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        msg = sess.run([z], feed_dict={batchsize: input})
        print(msg)
    

    现在我的输出是:

    [array([[0, 4],
           [1, 5],
           [2, 6],
           [3, 7]], dtype=int32)]
    

    但我希望输出为:

    [array([[0, 2],
           [1, 3],
           [4, 6],
           [5, 7]], dtype=int32)]
    

    请记住,我不知道批量大小有多大,我只是设置input = 8,原因有很多。此外,我想在每个第二个元素之后打破顺序。将来我也想拥有这种灵活性。在我的真实代码中,张量'x'不是范围数组而是复杂的随机数,所以你不能以任何方式排序w.r.t.价值。我刚刚制作了这个代码用于演示目的。

1 个答案:

答案 0 :(得分:0)

你可以尝试

 tf.reshape(tf.matrix_transpose(tf.reshape(x, [-1, 2, 2])), [-1, 2])