【问题标题】:Making a list and appending to it in TensorFlow在 TensorFlow 中创建一个列表并附加到它
【发布时间】:2017-02-28 21:07:58
【问题描述】:

我是 TensorFlow 新手。我无法理解如何在 TensorFlow 中创建动态“pythonic”列表。基本上,我对张量对象 (train_data[i]) 执行一些计算并将其附加到“列表”X,我希望它是一个形状为 (100,) 的张量

我想做这样的事情:

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 列表。

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

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

    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 回到单个张量。

    【讨论】:

    • 谢谢!我昨天想通了,但这是正确的答案。另一种方法是使用 tf.concat()。我在这里做了一个要点:gist.github.com/alivcor/921b797a7f0242b9024105f128bc7da8
    • @AbhinandanDubey 似乎 tf.concat(x, 0) 更像是“扩展”而不是“附加”。如果你真的需要“追加”,tf.stack() 会是更好的选择。
    【解决方案2】:

    我认为这里真正的答案是你必须稍微改变一下你的思维方式。在 Tensorflow 中,您首先定义一个计算图,然后使用值作为输入对其进行评估。

    对于您的示例:如果 X 确实是形状为 (100,1) 的张量,则 tf.log(X) 效果最佳。 如果您想像代码建议的那样创建一个动态列表,最好在将其传递给图表之前创建此列表。

    如果这有帮助,请告诉我!

    【讨论】:

    • 感谢 rmeertens !我知道我们在 TF 中构建图表,但我的问题是如何定义/初始化列表。运行上述代码的结果应该导致 X 成为 (100,1) 张量。您能否更具体地说明应该做些什么来实现这一目标?
    • 好吧,如果你真的坚持这样做,你可能可以使用 scatter_update 函数:tensorflow.org/api_docs/python/tf/scatter_update。如果 X 已经是 (100,1) 张量,您可以尝试 X = tf.scatter_update(X,[i],tf.log(train_data[i]))
    猜你喜欢
    • 2023-03-21
    • 2021-06-27
    • 2018-04-09
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多