在张量流中手动创建3+等级张量

时间:2016-10-20 12:13:26

标签: python tensorflow

我想在运行时创建一个[?,?,n]张量。 数据如下:

1)我正在检查的每个元素是n个元素的向量(所以[1,2,...,n])

2)每个“组”是前一类型的未知数量的元素(因此基本上是一个矩阵)

3)我不知道我会收到多少组。

我手动尝试了这样的事情:

shape3 = [
[ [ .111,.112,.113 ], [ .121,.122,.123 ], [ .131,.132,.133 ] ],
[ [ .211,.212,.213 ], [ .221,.222,.223 ] ]
]

var_shape3 = tf.Variable(shape3, name="var_shape_3")
with tf.Session() as session:
    session.run(init_op)
    print var_shape3.eval()
    print var_shape3.get_shape()

但我收到错误

  

论证必须是一个密集的张量:[[[0.111,0.112,0.113],[0.121,0.122,0.123],[0.131,0.132,0.133]],[[0.211,0.212,0.213],[0.221,0.222] ,0.223]]] - 得到了形状[2],但想要[2,3,3]。

请问我做错了什么?

换句话说:我如何将这些数据放入张量中?

谢谢

1 个答案:

答案 0 :(得分:3)

在TensorFlow中,您可以拥有dynamic dimensions,由?符号表示。但是这些维度必须在执行期间推断,这意味着一旦执行代码,它就需要用数字表示。

在您的示例中(组中包含可变数量的组和元素),这将不起作用。例如。将起作用的是:

shape3 = [
[ [ .111,.112,.113 ], [ .121,.122,.123 ], [ .131,.132,.133 ] ],
[ [ .211,.212,.213 ], [ .221,.222,.223 ], [ .000,.000,.000 ] ]
]

您的两个选择是:

  1. 定义组中的最大组和元素数,并使用填充填充缺失的数据点。您还可以使用分组对类似大小的示例进行分组(更多信息here)
  2. 更改您的代码/数据结构以使用可变长度序列。这可能需要使用TensorFlow scan op。请注意,这可能会非常慢,所以我不推荐它,除非它真的需要,更多信息here