我打算编写一个队列运行程序线程来进行一些处理。但基本上我可以将我的行动制定为某些TF操作,这取决于另一个queue.dequeue
。
所以,也许写这个的规范方法是:
op = make_op()
with coord.stop_on_exception():
while True:
session.run(op)
最后它会因OutOfRangeError
例外而停止。
然而,我也可以将循环实现为图形的一部分,并按如下方式编写:
def body(last):
with tf.control_dependencies([last]):
return make_op()
op = tf.while_loop(
cond=lambda: tf.constant(True),
body=body,
loop_vars=[tf.no_op()],
parallel_iterations=1, back_prop=False)
with coord.stop_on_exception():
session.run(op)
我希望这更快,因为执行循环时不会涉及Python代码。这种方法有什么缺点,或者为什么这不起作用?