在使用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笔记本可能会直接提供帮助。如果有人有任何想法可能导致此问题,我真的想分享更多信息。谢谢!
答案 0 :(得分:0)
事实证明,无论如何,我在开始时都选择了一种错误的方式来构建图形,这在我看来不会给出loop
。 loop error
给我一个想法,我做错了什么。但是我上面提到的有趣的问题仍然没有得到回答!但是,我想分享我的错误,以便任何人看到loop error
都应该考虑您是否在做与我相同的事情。
在input_fn
中,我使用tensor.eval()
在中间获得相应的numpy.array
与该函数外部的数据进行交互。我选择不使用tf.data.Dataset
,因为整个过程很复杂,而且我无法直接将整个内容压缩到Dataset
中。但是事实证明,这种方法破坏了Tensorflow的静态计算图设计。因此,在训练过程中,它会一次又一次地对同一批次进行训练。因此,我的两分钱建议是,如果您想在input_fn
中实现某些超级复杂的功能。通过使用老式的建模方法-tf.placeholder
,您可能会变得更好,甚至只会做正确的事。