在我的TensorFlow项目中,我想尝试不同的优化器,理想情况下,我要遍历它们,以便可以比较TensorBoard中的培训。我提取了优化位,因为失败了。我有这样的东西:
import os
import tensorflow as tf
eta = 0.1
num_epochs = 100
xv = tf.Variable(0.0)
sv = tf.Variable(0, trainable=False)
loss = xv * xv - 4.0 * xv + 5.0
optimizers = [tf.train.GradientDescentOptimizer(eta),
tf.train.AdagradOptimizer(eta),
tf.train.AdamOptimizer(eta)]
init = tf.global_variables_initializer()
saver = tf.train.Saver()
summary_op = tf.summary.scalar('x', xv)
writer = tf.summary.FileWriter('log', graph=tf.get_default_graph())
with tf.Session() as sess:
sess.run(init)
for optimizer in optimizers:
objective = optimizer.minimize(loss, global_step=sv)
for epoch in range(num_epochs):
_, step, result, summary = sess.run([objective, sv, xv, summary_op])
writer.add_summary(summary, global_step=step)
writer.flush()
saver.save(sess, os.getcwd() + '/output')
print(sess.run(xv))
失败并显示Errors may have originated from an input operation.
Input Source operations connected to node Adagrad/update_Variable_2/ApplyAdagrad:
Variable_2 (defined at <stdin>:1)
是否可以在TensorFlow中完成类似的操作,或者我使用会话错误,因为我试图在同一会话中从头开始多次运行同一件事,而没有重新初始化变量?我不确定如何实现这一目标。我尝试将循环放在tf.Session()
之外,但这也不起作用。
答案 0 :(得分:1)
我们通常只将一个优化器附加到相同的变量集。
调用optimizer.minimize(loss)
时,张量流会自动选择影响损耗的变量进行优化。不建议在相同的损失上拨3次optimizer.minimize(loss)
,然后再拨session.run(...)
。
如果您希望比较3个优化器,最好使用3个脚本分别测试每个优化器。
此外,您应仅对任何优化程序调用{{1}},因为重复调用该函数只会向图形添加新操作。当您调用optimizer.minimize(...)