2017-10-11 76 views
0

我正在学习tensorflow过程,但是有很多难以理解的过程。Tensorflow,节点已经死了

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

  2. 什么是实时数据vs死亡数据?这就像没有使用过的数据和已经使用过的数据? ......我想我对这个词还没有完全理解。它可以在功能ActivateNodes()(executor.cc)

显示在我认为这些问题可以是研究tensorflow如此基本,但是我想确切地知道。

感谢

回答

0

首先,死者张量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,而false_fn中的操作取决于output_false

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

tf.cond()如何阻止死张量一直传播到输出?第二个特殊操作,称为Merge op以不同的方式处理死输入。 A Merge op具有两个或更多个输入,并且它期望得到除输入的一个之外的所有的死输入;然后它将未死输入转发给它的输出。 tf.cond()使用Merge运算符合并来自true_fnfalse_fn的结果,因此所采用分支的结果作为整体tf.cond()子图的输出返回。

+0

感谢您的回复。然而,我并没有完全理解你的答案。 我可以问一件事吗? 据我所知,在tf.cond()中,Switch op和Merge op用于根据pred应用适当的结果。 但是我不确定死张量传播。如果Merge op不存在,那么已经收到死张量的张量作为输入,张量将发送到所有输出的死张量,对吗?在这一点上,为什么他们发送死张量输出?有没有什么办法可以消除死张量? – jwl1993

+0

我意识到一些问题,我问。我认为消除是不可能的,因为我们不知道下一次迭代会改变什么状态,所以我们不能手动管理死张量。当死张量输出有另一个过程时,发送过程也是必要的。我在正确的轨道上吗? – jwl1993

+0

对,'合并'操作是唯一可以“移除”死张量的支持机制。当有多个进程时,可以使用标准的'Send'和'Recv'操作程序在它们之间发送死张量。 – mrry