Tensorflow,节点已经死了
我正在学习tensorflow过程,但是有很多难以理解的过程。Tensorflow,节点已经死了
我不完全理解的术语之一是关于节点。在源代码(C++核心)中,有许多不同类型的节点。不过,我对死亡节点感到好奇。它会和常量节点不同。我想知道死亡节点存在的原因,换句话说,死亡节点的作用。
什么是实时数据vs死亡数据?这就像没有使用过的数据和已经使用过的数据? ......我想我对这个词还没有完全理解。它可以在功能ActivateNodes()(executor.cc)
显示在我认为这些问题可以是研究tensorflow如此基本,但是我想确切地知道。
感谢
首先,死者张量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
,而false_fn
中的操作取决于output_false
。
当张量收到死张量作为其输入之一时,它不执行;相反,它会在其所有输出中发送一个死张量。这种死张量传播确保只有适当分支中的操作才会执行。
tf.cond()
如何阻止死张量一直传播到输出?第二个特殊操作,称为Merge
op以不同的方式处理死输入。 A Merge
op具有两个或更多个输入,并且它期望得到除输入的一个之外的所有的死输入;然后它将未死输入转发给它的输出。 tf.cond()
使用Merge
运算符合并来自true_fn
和false_fn
的结果,因此所采用分支的结果作为整体tf.cond()
子图的输出返回。
感谢您的回复。然而,我并没有完全理解你的答案。 我可以问一件事吗? 据我所知,在tf.cond()中,Switch op和Merge op用于根据pred应用适当的结果。 但是我不确定死张量传播。如果Merge op不存在,那么已经收到死张量的张量作为输入,张量将发送到所有输出的死张量,对吗?在这一点上,为什么他们发送死张量输出?有没有什么办法可以消除死张量? – jwl1993
我意识到一些问题,我问。我认为消除是不可能的,因为我们不知道下一次迭代会改变什么状态,所以我们不能手动管理死张量。当死张量输出有另一个过程时,发送过程也是必要的。我在正确的轨道上吗? – jwl1993
对,'合并'操作是唯一可以“移除”死张量的支持机制。当有多个进程时,可以使用标准的'Send'和'Recv'操作程序在它们之间发送死张量。 – mrry