Tensorflow:图形无法';只有在终端运行时,才能按拓扑顺序排序

Tensorflow:图形无法';只有在终端运行时,才能按拓扑顺序排序,tensorflow,python-3.6,Tensorflow,Python 3.6,我在Google云计算实例上运行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] Iterat

我在Google云计算实例上运行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.
import A,B,C

...


def main():
    ....


if __name__ == '__main__':
    main()
我的train.py脚本如下所示:

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.
import A,B,C

...


def main():
    ....


if __name__ == '__main__':
    main()
因此,我将展示运行此脚本的两种方法:

版本1:

在候机楼

python3 train.py
这给了我上面所说的错误。当我只使用CPU时,我注意到它会抛出类似于
调用cuInit失败:CUDA\u错误\u无设备:未检测到支持CUDA的设备
。所以我将GPU添加到我的实例中,但计算图中的循环仍然存在

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

我只是简单地将
main
中的代码复制到jupyter笔记本上,然后在那里运行。然后突然,不再发生错误

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


如果您遇到同样的问题,复制到jupyter笔记本可能会直接有所帮助。我真的很想分享更多的信息,如果有人有任何想法可能导致这一点。谢谢大家!

事实证明,不管怎样,我在开始时选择了一种错误的方法来构建图形,这在我看来不会给出
循环。循环错误告诉我我做错了什么。但是我上面提到的有趣的问题仍然没有得到回答!但是,我想分享我的错误,这样任何看到
循环错误的人都应该考虑你是否在做与我相同的事情


在<代码>输入PFN < /代码>中,我使用<代码>张量.Author(<)>代码以获得相应的<代码> NoMPy。我选择不使用

tf.data.Dataset
,因为整个过程很复杂,我无法将整个过程直接压缩到
Dataset
中。但事实证明,这种方法破坏了Tensorflow的静态计算图设计。所以在训练过程中,它一次又一次地在同一批次上训练。所以我的建议是,如果你想在你的
输入中实现一些超级复杂的东西。通过使用老式的建模方式,你可能会更好,甚至只做正确的事情-
tf.placeholder

事实证明,不管怎样,我在开始时选择了一种错误的方法来构建图形,这在我的观点中不会给出
循环。循环错误告诉我我做错了什么。但是我上面提到的有趣的问题仍然没有得到回答!但是,我想分享我的错误,这样任何看到
循环错误的人都应该考虑你是否在做与我相同的事情

在<代码>输入PFN < /代码>中,我使用<代码>张量.Author(<)>代码以获得相应的<代码> NoMPy。我选择不使用

tf.data.Dataset
,因为整个过程很复杂,我无法将整个过程直接压缩到
Dataset
中。但事实证明,这种方法破坏了Tensorflow的静态计算图设计。所以在训练过程中,它一次又一次地在同一批次上训练。所以我的建议是,如果你想在你的
输入中实现一些超级复杂的东西。通过使用老式的建模方式-
tf.placeholder
,您可能会感觉更好,甚至只做正确的事情