【问题标题】:Modifying Tensorflow constant Tensor修改 Tensorflow 常量 Tensor
【发布时间】:2017-10-17 09:08:42
【问题描述】:

我用谷歌搜索并得知 Tensorflow 的 constant() 函数会生成一个常量 Tensor(大惊喜!)并且无法修改。

但是当我这样做时:

>>> a = tf.constant(0.0)
>>> a = a + 1.0

我没有看到 Tensorflow 产生任何错误。

我明白原因了,a 现在是一个新的张量运算Add (<tf.Tensor 'add_1:0' shape=() dtype=float32>)。

我的问题是,如果我们可以修改,Tensorflow constant 有什么用?它与图形优化有什么关系吗?我在这里错过了一些琐碎的事情吗?

提前致谢。

【问题讨论】:

标签: python tensorflow


【解决方案1】:

是的,你错过了一些琐碎的事情。

 a = tf.constant(0.0)

a 是一个 Python 变量,它保存计算图的一个常量节点。在图中它有一个名字,我们称之为constant:0

a = a + 1.0

a 是一个 new python 变量(赋值是破坏性操作),它保存了仍然在图中定义的节点 constant:0 和一个新的常量节点之间的加法操作,使用1.0constant_1:0)时自动创建。

因此,在这一行中,您将覆盖一个 python 变量以使其拥有一个 add 节点:您接触到图形节点 constant:0 的值。

这个常数,其实是在tensorflow描述的图中定义的,是不能改变的。 相反,您可以更改的是指向图中某个节点的 python 变量。

您可以将 python 变量视为指向图形节点的指针。

【讨论】:

  • 啊,现在我明白了。我在问题中提到了“我明白原因,a 现在是一个新的张量操作 Add”,但我没有看到 Tensorflow 数据流图和 Python 是两个不同的东西。谢谢
  • 有没有办法故意产生这个错误?
  • 有什么方法可以生成一个 tensorflow 错误,说明“无法修改常量张量”之类的内容?
  • 您可以尝试将值赋给图表一个常量张量。这会带来错误(因为常量对象没有assign 属性)。试试assign = tf.assign(a, 10.)sess.run(assing)。该程序将在tf.assing(a,10) 告诉您Tensor object has no attribute assign 时崩溃
  • 知道了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2017-04-13
  • 2023-03-03
  • 2015-01-31
  • 1970-01-01
  • 2016-09-01
相关资源
最近更新 更多