Tensorflow 警告:图表无法按拓扑顺序排序?

Tensorflow warning: The graph couldn't be sorted in topological order?

当我 运行 tensorflow 训练(使用自定义图形,闭源)时,它输出警告:

2018-10-03 14:29:24.352895: E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:666] Iteration = 0, topological sort failed with message: The graph couldn't be sorted in topological order.

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

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

有向图的 topological ordering 是其顶点的排序方式,只要存在从顶点 u 到顶点 v 的边,顶点 u 在排序中位于顶点 v 之前。

这种排序对于每个有向 非循环 图都是可能的,但对于任意图则不行。您的图中很可能存在某种循环,阻止排序算法成功。因此,要走的路是搜索循环并以某种方式将其删除。

例如,考虑一个非常小的图,它有两个顶点 uv,以及两条边 u -> vv -> u。没有办法按照上面给出的要求对u和v进行排序。

如果没有关于您的代码的更多信息,很难确切地说出发生了什么。

如果您的 TF/CUDA 版本与您使用的 cudnn 版本不匹配,就会遇到此错误消息。在这种情况下,它似乎是一个兼容性错误,并不一定表明您在自己的代码或模型设计中存在错误。据我所知,它发生在 TF 1.10-1.14. Downgrading or upgrading TF (or cudnn) to the 之间应该摆脱它。请注意,虽然这是一条错误消息,但尚不清楚它是否真的会产生任何错误,因为模型似乎会正常训练(错误消息除外)。