【问题标题】:Tensorflow, node which is deadTensorflow,死节点
【发布时间】:2017-10-12 13:17:25
【问题描述】:

我正在研究 tensorflow 过程,但是要理解这个过程有很多困难。

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

  2. 什么是实时数据与死数据?那是像未使用的数据还是已经使用的数据? ...我想我仍然没有完全理解这个词。可以在函数ActivateNodes()(executor.cc)中显示

我认为这些问题对于研究 tensorflow 来说可能是非常基础的,但我想确切地知道。

谢谢

【问题讨论】:

    标签: tensorflow


    【解决方案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 和@987654338 中的操作@ 依赖于output_false

    当一个张量接收到一个死张量作为其输入之一时,它不会执行;相反,它会在其所有输出上发送一个死张量。这种死张量传播确保只有相应分支中的操作才会执行。

    tf.cond() 如何阻止死张量一直传播到输出?第二个特殊操作,称为Merge op,以不同方式处理无效输入。 Merge 操作有两个或更多输入,它期望得到一个死输入,除了一个的输入;然后它将未死的输入转发到其输出。 tf.cond() 使用Merge ops 将true_fnfalse_fn 的结果组合在一起,因此所取分支的结果作为整个tf.cond() 子图的输出返回。

    【讨论】:

    • 感谢您的回复。但是我并不完全理解你的答案。我能问一件事吗?据我了解,在 tf.cond() 中,Switch op 和 Merge op 用于根据 pred 应用适当的结果。但是我不确定死张量传播。如果 Merge op 不存在,则接收到死张量作为输入的张量,张量将发送到所有输出死张量,对吗?在这一点上,为什么他们将死张量发送到输出?有什么方法可以去除死张量?
    • 我意识到我所问的问题。我认为移除是不可能的,因为我们不知道下一次迭代会改变什么状态,所以我们不能手动管理死张量。当死张量输出有另一个过程时,发送过程也是必要的。我在正确的轨道上吗?
    • 对,Merge op 是唯一支持的可以“移除”死张量的机制。当有多个进程时,可以使用标准的SendRecv 操作在它们之间发送死张量。
    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2013-12-31
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多