Tensorflow,死亡的节点

时间:2017-10-11 05:26:12

标签: tensorflow

我正在研究张量流过程,但要理解这个过程有很多硬度。

  1. 我不完全理解的一个术语是节点。在源代码(C ++核心)中,有许多不同类型的节点。但是我对死节点感到好奇。它与常量节点不同。我想知道死节点存在的原因,换句话说,死节点的作用。

  2. 什么是实时数据与死数据?这就像未使用的数据vs已经使用过吗? ......我想我还不完全了解这个词。它可以在函数ActivateNodes()(executor.cc)

  3. 中显示

    我认为这些问题对于研究张量流是如此基础,但我想确切地知道。

    由于

1 个答案:

答案 0 :(得分:1)

首先,死张量是TensorFlow控制流构造的实现细节:tf.cond()tf.while_loop()。这些结构使TensorFlow能够根据数据相关值确定是否执行子图。

让我们考虑更简单的tf.cond(pred, true_fn, false_fn)案例。 pred的值确定是否会执行true_fnfalse_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_fnfalse_fn的结果,因此将获取的分支的结果作为整体{{1}的输出返回子图。