Tensorflow警告:无法按拓扑顺序对图进行排序?

时间:2018-10-02 11:03:58

标签: python tensorflow neural-network deep-learning warnings

当我运行tensorflow训练(带有自定义定义的图形,封闭源代码)时,它会输出警告:

  

2018-10-03 14:29:24.352895:E tensorflow / core / grappler / optimizers / dependency_optimizer.cc:666]迭代= 0,拓扑排序失败,并显示以下消息:该图无法按拓扑顺序排序。

是什么意思?是什么可能导致此问题以及如何避免呢?

更新:就我而言,tensorflow尽管有此警告,但仍然可以正常工作。因此,我认为这只是意味着计算图中的循环要多于tensorflow所期望的循环,而不一定是无限循环。我通过避免在代码中使用手动循环来解决此问题,而是使用张量操纵(stack, concat, slice, reshape...

2 个答案:

答案 0 :(得分:2)

有向图的topological ordering是其顶点的排序,使得只要存在从顶点u到顶点v的边,顶点u按顺序排在顶点v之前。

每种有向 acyclic 图都可以进行这种排序,但任意图都不能。图中很可能存在某种循环,导致排序算法无法成功执行。因此,解决方法是搜索周期并以某种方式将其删除。

以一个示例为例,考虑一个非常小的图形,它具有两个顶点uv,并且有两个边缘u -> vv -> u。无法按照上述要求对u和v进行排序。

没有有关代码的更多信息,很难确切说明正在发生什么。

答案 1 :(得分:0)

如果您的TF / CUDA版本与所使用的cudnn版本不匹配,则会遇到此错误消息。在这种情况下,这似乎是兼容性错误,并不一定表示您自己的代码或模型设计中存在错误。据我所知,它发生在TF 1.10-1.14之间。将TF(或cudnn)降级或升级到correct version应该可以摆脱它。请注意,尽管这是一条错误消息,但尚不清楚它是否实际上会产生任何错误,因为模型似乎可以正常训练(错误消息除外)。