2017-09-16 90 views
1

我试图做这样的事情创建索引:对于2D张量

假设输入张量是(2, 3)张量的值,如:

[[1 2] 
[3 4] 
[5 6]] 

我压扁2D张量成1D在做:

input = tf.reshape(input, [-1]) 

所以输入现在变成[1 2 3 4 5 6]

但我还创建了一个索引前张量的1D张量,所以期望的输出是[0 0 1 1 2 2]。我应该如何在TF中创建这个张量?

通常,如果输入张量的形状为(X, Y)。我想创建一个如下的1D张量:

[0 0 0 ... 0 1 ....1 2 ... 2 ... X-1 ... X-1] 

其中每个值重复Y - 1次。

+0

看来你的例子所需的输出只代表行索引。你是否也需要列索引? –

+1

@SaulloCastro - 我不需要列索引。我也更新了这个问题来反映这一点。 :) – derekhh

回答

1

这是一种方法;这样做首先创建一个单行索引,然后用原始张量使用的列数重复每个索引tf.tile;重新塑造2d指数给你需要的东西。

t = tf.constant([[1,2],[3,4],[5,6]]) 

X, Y = t.shape 
idx = tf.range(X.value) 
idx_2d = tf.reshape(idx, [-1,1]) 
idx_2d_full = tf.tile(idx_2d, [1, Y.value]) 
idx_flat = tf.reshape(idx_2d_full, [-1]) 

with tf.Session() as sess: 
    print(sess.run(idx_flat)) 

[0 0 1 1 2 2] 
+1

谢谢!我犯了一个错误,认为'tf.tile'只接受multiplies参数的标量值,所以我最初实现了如下内容:创建一个看起来像'[0 1 2 3 4 5]'的1D张量,然后除以3 。:)你的实现绝对更干净。 – derekhh