Tensorflow python:将输入 [batchsize] 重塑为具有特定顺序的张量 [batchsize, 2]
Tensorflow python: reshape input [batchsize] to tensor [batchsize, 2] with specific order
我有一个张量 (shape=[batchsize])。我想按特定顺序重塑张量并使其成为 shape=[-1,2]。但我想要:
- [0,0] 处的元素
- 位于 [1,0] 的元素
- 元素位于 [0,1]
- [1,1] 处的元素
- 元素位于 [0,2]
- [0,3] 处的元素
- 位于 [2,1] 的元素
- [3,1] 处的元素,依此类推,批量大小未知。
这是张量范围=(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)]
请记住,我不知道 batchsize 有多大,出于示范原因,我只是设置了 input= 8。此外,我想在每第二个元素之后打破顺序。将来我也希望有这种灵活性。在我的真实代码中,张量“x”不是范围数组而是复杂的随机数,因此您不能以任何方式排序 w.r.t。价值。我只是出于演示目的制作了这段代码。
你可以试试
tf.reshape(tf.matrix_transpose(tf.reshape(x, [-1, 2, 2])), [-1, 2])
我有一个张量 (shape=[batchsize])。我想按特定顺序重塑张量并使其成为 shape=[-1,2]。但我想要:
- [0,0] 处的元素
- 位于 [1,0] 的元素
- 元素位于 [0,1]
- [1,1] 处的元素
- 元素位于 [0,2]
- [0,3] 处的元素
- 位于 [2,1] 的元素
- [3,1] 处的元素,依此类推,批量大小未知。
这是张量范围=(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)]
请记住,我不知道 batchsize 有多大,出于示范原因,我只是设置了 input= 8。此外,我想在每第二个元素之后打破顺序。将来我也希望有这种灵活性。在我的真实代码中,张量“x”不是范围数组而是复杂的随机数,因此您不能以任何方式排序 w.r.t。价值。我只是出于演示目的制作了这段代码。
你可以试试
tf.reshape(tf.matrix_transpose(tf.reshape(x, [-1, 2, 2])), [-1, 2])