在tf.Session()中循环

时间:2019-08-26 12:18:44

标签: python tensorflow

在我的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()之外,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

我们通常只将一个优化器附加到相同的变量集。

调用optimizer.minimize(loss)时,张量流会自动选择影响损耗的变量进行优化。不建议在相同的损失上拨3次optimizer.minimize(loss),然后再拨session.run(...)

如果您希望比较3个优化器,最好使用3个脚本分别测试每个优化器。

此外,您应仅对任何优化程序调用{​​{1}},因为重复调用该函数只会向图形添加新操作。当您调用optimizer.minimize(...)

时,将执行实际的计算