在阅读一些Tensorflow
实现时,在我看来,有两种方法可以实现培训过程。
例如in this implementation,培训细分就像这样。
with sess.as_default():
sess.run(init_op)
sess.run(init_local_op) # we need this only with tensorflow 0.10rc
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
while not coord.should_stop():
step += 1
x, y = sess.run([train_image_batch, train_label_batch])
train_step.run(feed_dict={keep_prob: 0.75,
x_: x, y_: y})
if step % TRAIN_BATCH_SIZE == 0:
x, y = sess.run([valid_image_batch, valid_label_batch])
result = sess.run([merged, accuracy], feed_dict={keep_prob: 1.0,
x_: x, y_: y})
summary_str = result[0]
acc = result[1]
writer.add_summary(summary_str, step)
print("Accuracy at step %s: %s" % (step, acc))
except tf.errors.OutOfRangeError:
x, y = sess.run([valid_image_batch, valid_label_batch])
result = sess.run([accuracy], feed_dict={keep_prob: 1.0,
x_: x, y_: y})
print("Validation accuracy: %s" % result[0])
finally:
coord.request_stop()
coord.join(threads)
sess.close()
在我看来,coord = tf.train.Coordinator()
和threads = tf.train.start_queue_runners(sess=sess, coord=coord)
用于控制培训过程。这与实施cifar10 example中包含的培训流程的方式有所不同,这在我看来更为直接,类似于for step in xrange(FLAGS.max_steps):...
。我的问题是,这两种方法之间有什么不同吗?什么时候用哪个?感谢。