我正在查看distributed inception model in TF的代码,其中我在inception_distributed_train.py中对tf.train.Supervisor.start_queue_runners
的使用提出了以下问题:
为什么我们需要明确地调用sv.start_queue_runners()
inception_distributed_train.py中的264
和269
行?在API
doc. of start_queue_runners中,我发现没有必要这样做
电话原因是:
请注意,图表键中收集的队列运行器密钥为QUEUE_RUNNERS 已创建会话时已自动启动 主管,所以除非你有非收集的队列运行器来启动 你不需要明确地调用它。
我注意到queue_runners
的值在调用中
行sv.start_queue_runners
和行264
不同
inception_distributed_train.py中的269
。但事实并非如此
chief_queue_runners
也在收藏中
tf.GraphKeys.QUEUE_RUNNERS
(所有QUEUE_RUNNERS
都是在263
行中获得的)?如果
所以,由于269
已经存在,因此不需要行chief_queue_runners
已在第264
行开始。
此外,您能否向我解释或向我展示一些关于在tf.train.Supervisor
中创建队列的参考资料?
谢谢你的时间!
答案 0 :(得分:1)
不是答案,但是一些一般说明如何找到答案:)
首先,使用github的责任,inception_distributed已于4月13日签入,而start_queue_runners
中的评论于4月15日被添加,因此可能会更改功能但是在所有使用它的地方都没有更新。
你可以注释掉那一行,看看事情是否仍然有效。如果没有,您可以在创建队列运行器的位置添加import pdb; pdb.set_trace()
(即here),并查看谁在创建这些额外的无人值守队列运行器。
此外,Supervisor开发似乎已经放缓,事情正在转移到FooSession(来自评论here)。那些提供了更强大的培训架构(由于临时网络错误,您的工作人员不会崩溃),但是关于如何使用它们的例子并不多。