Tensorflow:Tensor的重复(tile)元素

时间:2017-05-14 15:07:30

标签: python list tensorflow tensor

我有一个输入张量如下:

a = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

和'倍数'张量:

mul= tf.constant([1, 3, 2])

是否可以平铺3D张量,第一个元素a出现一次,第二个出现3次,最后一个元素出现两次?

result = [
             [[1, 2, 3]],
             [[4, 5, 6],[4, 5, 6],[4, 5, 6]],
             [[7, 8, 9], [7, 8, 9]]
                                   ]

Tensorflow 0.12

非常感谢。

3 个答案:

答案 0 :(得分:1)

不,这是不可能的。阅读tensors and shapes from the docs

要理解为什么不可能想象每行中具有不同数量元素的矩阵。它显然不是一个矩阵。

答案 1 :(得分:0)

你可以使用numpy

import numpy as np
import tensorflow as tf
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mul = np.array([1,3,2])
result = []
for i in range(len(mul)):
  result.append(np.tile(a[i], (mul[i], 1)))
result = np.array(result)

答案 2 :(得分:0)

我确信你在tensorflow中不能有非矩形张量。这就是导致问题的原因。否则我只是将@Kris的代码扩展为完全在tensorflow上运行。

import tensorflow as tf

sess = tf.InteractiveSession()

a = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mul = tf.constant([1,3,2])
result = []
for i in range(3):
  result.append(tf.tile(a[i],[mul[i]]))
print([r.eval() for r in result])
#r_tensor = tf.stack(0,[r for r in result]) # Not possible