Graph “a”是什么;“参考边”;在张力板上?

Graph “a”是什么;“参考边”;在张力板上?,graph,tensorflow,tensorboard,Graph,Tensorflow,Tensorboard,TensorBoard UI显示了一种称为“参考边缘”的东西,与数据流(Tensor)边缘不同: 前者与后者的区别是什么 文档中说“传出操作节点可以改变传入张量”,但表示与UI不匹配的不同符号,因此很难区分“传入”和“传出”的含义: 例如,该定义如何应用于 cs = tf.constant([1,2,3], name='const_share') vs = tf.Variable([1,2,3], name='var_share') tf.add(cs, vs, name='opVS1')

TensorBoard UI显示了一种称为“参考边缘”的东西,与数据流(
Tensor
)边缘不同:

前者与后者的区别是什么

文档中说“传出操作节点可以改变传入张量”,但表示与UI不匹配的不同符号,因此很难区分“传入”和“传出”的含义:

例如,该定义如何应用于

cs = tf.constant([1,2,3], name='const_share')
vs = tf.Variable([1,2,3], name='var_share')
tf.add(cs, vs, name='opVS1')
tf.add(vs, cs, name='opVS2')


在这两种情况下,似乎参考边表示其尾部填充边所表示的张量的值。

在您显示的图中,似乎只有连接到“read”运算符的边是无向边-
数据流边
,您可以通过右键单击并“从主图形中删除”临时断开
读取
节点的连接。然后,事实证明,这些边从数据流边(无方向)转向了引用边(有方向),这没有多大意义

我们可能需要依靠真正理解javascript的人通过查看javascript的源代码来了解它是如何工作的


我在您的图形上看不到任何参考边,但以下是如何轻松获得参考边的方法:

import tensorflow as tf
a = tf.Variable(1, name="a")
b = a.assign_add(2)

with tf.Session() as sess:
    tf.summary.FileWriter('logs', sess.graph)
    sess.run(tf.global_variables_initializer())
当您单击
a
并将其从主图形中删除时,您将看到一条参考边:

在TF中,在运行时不存在任何错误。但有些操作(如)通过修改某个输入返回相同的值:

ref:可变张量

因此,TF添加了一个引用边,操作在该边读取以前的值,执行某些操作并用新值重写它。这种类比很可能与指针/引用有关。所以doc有点道理:

显示传出操作节点可以变异的参考边 入射张量


这是一个混乱的根源,并且正在进行:

  • 所有参考边都将是不同的颜色(和数据流边) 和以前一样的灰色)
  • 指向所有数据流边缘的箭头,无论在何处 它们指向(而不是仅在数据流动的情况下出现 “向下”)

  • 嗯,这太奇怪了。至少有一些新的“参考”边实际上是对某些东西的参考(这对解释文档没有多大帮助,但至少“参考”一词现在似乎是有动机的)。“我在图形上没有看到任何参考边”:所以UI中的键是错的(文档中的键是对的)?“事实上,这一切都是有道理的。”我不能肯定地说。但我一直认为双向边
    是参考边。是的,我认为文档是正确的,但不知怎么的,UI中的键将其全部混淆了。在这一点上,我可以看到一些是橙色的“参考边”,但有时会有双头灰色边。双头灰色边和橙色参考边之间有什么区别?我必须说,我看不出这些插图的意义。至少对我来说,它们远不如相应的定义代码清晰。@MaxB对于大型图形,它们是不可或缺的,尤其是在早期设计阶段。
    import tensorflow as tf
    a = tf.Variable(1, name="a")
    b = a.assign_add(2)
    
    with tf.Session() as sess:
        tf.summary.FileWriter('logs', sess.graph)
        sess.run(tf.global_variables_initializer())