当我运行tensorflow
训练(带有自定义定义的图形,封闭源代码)时,它会输出警告:
2018-10-03 14:29:24.352895:E tensorflow / core / grappler / optimizers / dependency_optimizer.cc:666]迭代= 0,拓扑排序失败,并显示以下消息:该图无法按拓扑顺序排序。
是什么意思?是什么可能导致此问题以及如何避免呢?
更新:就我而言,tensorflow
尽管有此警告,但仍然可以正常工作。因此,我认为这只是意味着计算图中的循环要多于tensorflow
所期望的循环,而不一定是无限循环。我通过避免在代码中使用手动循环来解决此问题,而是使用张量操纵(stack, concat, slice, reshape...
)
答案 0 :(得分:2)
有向图的topological ordering是其顶点的排序,使得只要存在从顶点u
到顶点v
的边,顶点u
按顺序排在顶点v
之前。
每种有向 acyclic 图都可以进行这种排序,但任意图都不能。图中很可能存在某种循环,导致排序算法无法成功执行。因此,解决方法是搜索周期并以某种方式将其删除。
以一个示例为例,考虑一个非常小的图形,它具有两个顶点u
和v
,并且有两个边缘u -> v
和v -> u
。无法按照上述要求对u和v进行排序。
没有有关代码的更多信息,很难确切说明正在发生什么。
答案 1 :(得分:0)
如果您的TF / CUDA版本与所使用的cudnn版本不匹配,则会遇到此错误消息。在这种情况下,这似乎是兼容性错误,并不一定表示您自己的代码或模型设计中存在错误。据我所知,它发生在TF 1.10-1.14之间。将TF(或cudnn)降级或升级到correct version应该可以摆脱它。请注意,尽管这是一条错误消息,但尚不清楚它是否实际上会产生任何错误,因为模型似乎可以正常训练(错误消息除外)。