我在Tensorflow代码中经常看到以下模式,但通常忽略这些模式后性能会更好。
with tf.Graph().as_default(): # 在这里构建图 ... loss, train_op = ... with tf.Session() as sess: # 或者: with sv.managed_sess() as sess, 等 # 在这里运行训练步骤 ... sess.run(train_op)
但我更喜欢先定义我的图,然后再单独运行会话,如下所示(特别是在Jupyter笔记本中)。
在一个单元格中:
with tf.Graph().as_default(): # 在这里构建图 ... loss, train_op = ...
在另一个单元格中:
with tf.Session() as sess: # 或者: with sv.managed_sess() as sess, 等 # 在这里运行训练步骤 ... sess.run(train_op)
我注意到第一种方法创建图需要时间。有时我使用多个图,第二种方法是我的唯一选择。为什么一种方法会比另一种更好?
回答:
在常规的Python脚本中,这两种方法没有区别。但是,如果你使用笔记本,并且单独执行单元格,那么显然不重新创建图比从头开始创建要快。