【问题标题】:Tensorflow: The graph couldn't be sorted in topological order only when running in terminalTensorflow:仅在终端中运行时无法按拓扑顺序对图进行排序
【发布时间】:2019-06-06 02:46:47
【问题描述】:

我在谷歌云计算实例上运行 python 脚本时遇到了一些问题,python 3.6,tensorflow 1.13.1。我看到有几个人在stackoverflow的计算图中遇到了类似的循环问题。但没有一个真正找到它的罪魁祸首。而且我观察到一些有趣的事情,所以也许有经验的人可以弄清楚。

错误信息是这样的:

2019-05-28 22:28:57.747339: E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:704] Iteration = 0, topological sort failed with message: The graph couldn't be sorted in topological order.
2019-05-28 22:28:57.754195: E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:704] Iteration = 1, topological sort failed with message: The graph couldn't be sorted in topological order.

我的 train.py 脚本如下所示:

import A,B,C

...


def main():
    ....


if __name__ == '__main__':
    main()

所以我将展示我运行此脚本的两种方法:

版本 1:

在终端中,

python3 train.py

这给了我上面所说的错误。当我只使用 CPU 时,我注意到它会抛出类似 failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected 的东西。所以我将 GPU 添加到我的实例中,但计算图中的循环仍然存在。

版本 2(这是发生奇怪事情的地方):

我只是简单地将main 中的代码复制到 jupyter notebook 并在那里运行,没有任何改变。然后突然就没有错误了。

我真的不知道引擎盖下发生了什么。我只是注意到运行开始时的消息在两种不同的代码运行方式之间是不一样的。

如果你遇到同样的问题,复制到 jupyter notebook 可能会直接有帮助。如果有人有任何想法可能导致这种情况,我真的很想分享更多信息。谢谢!

【问题讨论】:

    标签: tensorflow python-3.6


    【解决方案1】:

    事实证明,无论如何,我一开始就选择了错误的方式来构建图表,这在我看来不会给出looploop error 告诉我我做错了什么。但是我上面提到的有趣的问题仍然没有答案!但是,我想分享我的错误,以便任何看到loop error 的人都应该思考您是否正在和我做同样的事情。

    input_fn中,我使用tensor.eval()在中间得到对应的numpy.array与该函数之外的数据进行交互。我选择不使用tf.data.Dataset,因为整个过程很复杂,我不能直接将整个东西压缩成Dataset。但事实证明,这种方法破坏了 Tensorflow 的静态计算图设计。因此,在训练期间,它一次又一次地在同一批次上训练。所以我的两分钱建议是,如果你想在你的input_fn 中实现一些超级复杂的东西。通过使用老式的建模方式,您可能会过得更好,甚至只做正确的事-tf.placeholder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 2014-05-08
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2018-12-29
      • 2014-10-03
      • 2010-12-31
      相关资源
      最近更新 更多