我有一个尺寸为9 X 1536的张量[a, b, c, d, e, f, g, h, i]
。我需要创建一个新的张量,就像[(a,b), (a,c), (a,d), (a,e),(a,f),(a,g), (a,h), (a,i)]
一样,尺寸为[8 x 2 x 1536]。如何使用tensorflow进行操作?
我试过这个
x = tf.zeros((9x1536))
x_new = tf.stack([(x[0],x[1]),
(x[0], x[2]),
(x[0], x[3]),
(x[0], x[4]),
(x[0], x[5]),
(x[0], x[6]),
(x[0], x[7]),
(x[0], x[8])])
这似乎有效但我想知道是否有更好的解决方案或方法可以用来代替这个
答案 0 :(得分:1)
您可以使用tf.concat
,tf.tile
和tf.expand_dims
的组合获得所需的输出:
import tensorflow as tf
import numpy as np
_in = tf.constant(np.random.randint(0,10,(9,1536)))
tile_shape = [(_in.shape[0]-1).value] + [1]*len(_in.shape[1:].as_list())
_out = tf.concat([
tf.expand_dims(
tf.tile(
[_in[0]],
tile_shape
)
,
1),
tf.expand_dims(_in[1:], 1)
],
1
)
tf.tile
重复_in
的第一个元素,创建一个长度为len(_in)-1
的张量(我单独计算图块的形状,因为我们只想在第一个维度上平铺)。 / p>
tf.expand_dims
添加了一个我们可以连接的维度
最后,tf.concat
将两个张量拼接在一起,得到了理想的结果。
编辑:重写以适应OP的多维张量的实际用例。