2017-02-28 170 views
2

我是TensorFlow的新手。我无法理解如何在TensorFlow中创建动态“pythonic”列表。基本上,我张量对象(train_data[i])上进行一些计算和它追加到“列表” X,我想和形状的张量(100,)在TensorFlow中制作一个列表并添加到列表中

我想要做这样的事情:

X = [] 
for i in range(100): 
    q = tf.log(train_data[i]) 
    print(q) #Tensor("Log:0", shape=(), dtype=float32) 
    X.append(q) 

我想要X是一个形状为(100,)的张量,基本上是一个张量对象的列向量。如果我运行上面的代码,我会得到一个TensorObjects的Python列表。

回答

2

如果你想X转换为(100)张量后,你可以添加X = tf.stack(X)您的for循环:

X = [] 
for i in range(100): 
    q = tf.log(train_data[i]) 
    print(q) #Tensor("Log:0", shape=(), dtype=float32) 
    X.append(q) 
X = tf.stack(X) 

这是一个有用的结构,你可能要tf.unstack一些张,环比结果列表,然后使用tf.stack返回单个张量。

+1

谢谢!我昨天知道了,但这是正确的答案。另一种方法是使用tf.concat()。我在这里做了一个要点:https://gist.github.com/alivcor/921b797a7f0242b9024105f128bc7da8 –

0

我想这里真正的答案是你必须改变你的想法。在Tensorflow中,您首先定义一个计算图,然后用值作为输入进行评估。

对于你的例子:如果X确实是一个具有形状的张量(100,1),tf.log(X)将效果最好。 如果你想创建一个像你的代码建议的动态列表,最好在将它传递给图之前创建这个列表。

让我知道这是否有帮助!

+0

谢谢rmeertens!我明白我们在TF中构建图表,但我的问题是如何定义/初始化列表。运行上述代码的结果应该导致X是(100,1)张量。你能否更具体地说明应该做些什么来实现这一目标? –

+0

好吧,如果你真的坚持这样做,你可以使用scatter_update函数:https://www.tensorflow.org/api_docs/python/tf/scatter_update。 如果X已经是(100,1)张量,那么可以尝试X = tf.scatter_update(X,[i],tf.log(train_data [i])) – rmeertens

相关问题