我在谷歌上搜索并知道 Tensorflow 的constant()函数会生成一个恒定的张量(大惊喜!)并且无法修改。
但是当我这样做时:
>>> a = tf.constant(0.0)
>>> a = a + 1.0
Run Code Online (Sandbox Code Playgroud)
我没有看到 Tensorflow 产生的任何错误。
我明白了原因,a现在是一个新的张量操作Add(<tf.Tensor 'add_1:0' shape=() dtype=float32>)。
我的问题是,constant如果我们可以修改它,Tensorflow有什么用?它与图形优化有什么关系吗?我在这里错过了一些微不足道的东西吗?
提前致谢。
是的,你错过了一些微不足道的东西。
a = tf.constant(0.0)
Run Code Online (Sandbox Code Playgroud)
a是一个 Python 变量,用于保存计算图的常量节点。在图中它有一个名字,我们称之为constant:0。
a = a + 1.0
Run Code Online (Sandbox Code Playgroud)
a是一个新的python变量(赋值是一个破坏性操作),它保存constant:0图中仍然定义的节点和一个新的常量节点之间的添加操作,使用1.0( constant_1:0)时自动创建。
因此,在这一行中,您将覆盖一个 python 变量以使其包含一个add节点:您没有接触图形节点的值constant:0。
常量,实际上是在tensorflow描述的图中定义的,不能改变。相反,您可以更改的是指向图中某个节点的 python 变量。
您可以将 python 变量视为指向图形节点的指针。