Tensorflow:仅在终端中运行时,无法按拓扑顺序对图形进行排序

时间:2019-05-28 22:47:03

标签: tensorflow python-3.6

在使用python 3.6,tensorflow 1.13.1的Google云计算实例上运行python脚本时遇到一些问题。我看到几个人在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笔记本中并在其中运行。然后突然,不再发生错误。

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

如果遇到相同的问题,将其复制到jupyter笔记本可能会直接提供帮助。如果有人有任何想法可能导致此问题,我真的想分享更多信息。谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,无论如何,我在开始时都选择了一种错误的方式来构建图形,这在我看来不会给出looploop error给我一个想法,我做错了什么。但是我上面提到的有趣的问题仍然没有得到回答!但是,我想分享我的错误,以便任何人看到loop error都应该考虑您是否在做与我相同的事情。

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