我正在研究张量流过程,但要理解这个过程有很多硬度。
我不完全理解的一个术语是节点。在源代码(C ++核心)中,有许多不同类型的节点。但是我对死节点感到好奇。它与常量节点不同。我想知道死节点存在的原因,换句话说,死节点的作用。
什么是实时数据与死数据?这就像未使用的数据vs已经使用过吗? ......我想我还不完全了解这个词。它可以在函数ActivateNodes()(executor.cc)
我认为这些问题对于研究张量流是如此基础,但我想确切地知道。
由于
答案 0 :(得分:1)
首先,死张量是TensorFlow控制流构造的实现细节:tf.cond()
和tf.while_loop()
。这些结构使TensorFlow能够根据数据相关值确定是否执行子图。
让我们考虑更简单的tf.cond(pred, true_fn, false_fn)
案例。 pred
的值确定是否会执行true_fn
或false_fn
中的操作。在当前的实现中,pred
提供给Switch
op,它在一个输入上发送常规张量,在另一个输入上发送死张量。如果pred
为真,则死亡张量沿output_false
发送(反之亦然)tf.cond()
实施已设置,以便true_fn
中的操作取决于{output_true
1}}和false_fn
中的操作取决于output_false
。
当张量作为其输入之一接收死张量时,它不会执行;相反,它会在其所有输出上发送死亡张量。这种死张量传播确保只有相应分支中的操作才会执行。
tf.cond()
如何阻止死亡张量一直传播到输出?第二个特殊操作,称为Merge
op,以不同的方式处理死输入。 Merge
op有两个或多个输入,除了一个输入外,它希望得到所有输入的死输入;然后它将非死输入转发给它的输出。 tf.cond()
使用Merge
操作来合并true_fn
和false_fn
的结果,因此将获取的分支的结果作为整体{{1}的输出返回子图。