【问题标题】:Graph loops in tensorflow张量流中的图形循环
【发布时间】:2017-10-09 00:53:13
【问题描述】:

我的印象是张量流图是有向无环图。然而,在探索https://github.com/nilboy/tensorflow-yolo 生成的(相当大的)图表时,我偶然发现了图表中的一个循环:

 1. gradients/b_count_62:0 -> gradients/b_count_62
 2. gradients/b_count_62 -> gradients/GreaterEqual_15:0
 3. gradients/GreaterEqual_15:0 -> gradients/GreaterEqual_15
 4. gradients/GreaterEqual_15 -> gradients/Merge_31:0, gradients/GreaterEqual_15/Enter:0
 5. gradients/Merge_31:0 -> gradients/Merge_31
 6. gradients/Merge_31 -> gradients/b_count_61:0, gradients/NextIteration_31:0
 7. gradients/NextIteration_31:0 -> gradients/NextIteration_31
 8. gradients/NextIteration_31 -> gradients/Sub_15:0
 9. gradients/Sub_15:0 -> gradients/Sub_15
10. gradients/Sub_15 -> gradients/Switch_31:1, gradients/GreaterEqual_15/Enter:0
11. gradients/Switch_31:1 -> gradients/Switch_31
12. gradients/Switch_31 -> gradients/Merge_31:0, gradients/b_count_62:0 (loop, references line 5 and line 1)

哪些操作支持上述循环,这些循环是如何创建的(来自 python),以及在会话中运行时这些循环的语义是什么?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    它们由tf.while_loop创建,语义遵循分布式while循环的经典数据流原语,“TensorFlow:大规模机器学习系统”(link)的第3.4节有一些参考

    【讨论】:

    • 也许我的问题不够具体——我想直接/独立于 python 创建每个操作。这似乎很大程度上没有记录,但由以下方法支持: op._add_input(tensor, dtype=None) op._update_input(index, tensor, dtype=None) op._add_control_input(ops) 我试图阅读源代码tf.while_loop,但它相当复杂,我不清楚它如何使用这些(或其他东西)在图中生成依赖循环。
    • 那些是“隐藏的”操作,并且是故意未记录的(任何未记录的都不是 API 的一部分,可以随时更改/删除),因此阅读源代码可能是最好的方法。似乎 tf.while_loop 正在被弃用,即,请参阅commit 进行替换。 NextIteration ops 可能会保留,但需要较低级别的 API 来构建它们。
    • PS,这里有一个更简单的例子,直接构造合并/切换节点以实现某些图部分的延迟执行——gist.github.com/yaroslavvb/d67410e240369736fc4ba0267250ef27
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2016-02-12
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多