如何从旧的张量创建一个新的张量阵列

时间:2018-01-23 14:06:36

标签: tensorflow

我有一个尺寸为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])])

这似乎有效但我想知道是否有更好的解决方案或方法可以用来代替这个

1 个答案:

答案 0 :(得分:1)

您可以使用tf.concattf.tiletf.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的多维张量的实际用例。