在通常的 TensorFlow 训练循环中,例如
train_op = tf.train.AdamOptimizer().minimize(cross_entropy)
with tf.Session() as sess:
for i in range(num_steps):
# ...
train_op.run(feed_dict = feed_dict)
train_op.run
回报None
.
但是,有时收集中间结果很有用,例如目标的值或准确性。
添加额外的sess.run
调用需要再次进行前向传播,从而增加运行时间:
train_op = tf.train.AdamOptimizer().minimize(cross_entropy)
with tf.Session() as sess:
for i in range(num_steps):
# ...
o, a = sess.run([objective, accuracy], feed_dict = feed_dict)
train_op.run(feed_dict = feed_dict)
是否可以在 TensorFlow 中一次性完成此操作?
Edit:
人们建议
sess.run([objective, accuracy, train_op], feed_dict = feed_dict)
但结果取决于列表元素的执行顺序:
[objective, accuracy, train_op]
这似乎是未定义的——根据是否使用 CUDA,您会得到不同的结果 https://stackoverflow.com/a/43858891/1937197.