确定什么是修改TensorFlow图
我试图使用确定什么是修改TensorFlow图,tensorflow,Tensorflow,我试图使用tf.train.Supervisor(),但收到以下错误:运行时错误:图形已完成,无法修改。 问题很明显,我是在实例化一个主管(并由确认)后修改图表的,但它没有告诉我如何找到修改图表的位置。我已经阅读了我的代码,没有什么看起来像是明显的罪魁祸首,尽管在我发布的另一个问题中,我发现.minimize()会改变图表,所以我可能会犯类似的错误 这是我的密码。然而,当我对发现我的bug感兴趣时,我也对学习如何解决这个问题感兴趣 tf.set_random_seed(seed=0) super
tf.train.Supervisor()
,但收到以下错误:运行时错误:图形已完成,无法修改。
问题很明显,我是在实例化一个主管(并由确认)后修改图表的,但它没有告诉我如何找到修改图表的位置。我已经阅读了我的代码,没有什么看起来像是明显的罪魁祸首,尽管在我发布的另一个问题中,我发现.minimize()
会改变图表,所以我可能会犯类似的错误
这是我的密码。然而,当我对发现我的bug感兴趣时,我也对学习如何解决这个问题感兴趣
tf.set_random_seed(seed=0)
supervisor = tf.train.Supervisor(logdir=tf.flags.FLAGS.log_dir,
global_step=model.global_step)
# create coordinator to handle threading
coord = tf.train.Coordinator()
supervisor = tf.train.Supervisor(logdir=tf.flags.FLAGS.log_dir,
global_step=global_step)
with supervisor.managed_session() as sess:
# start threads to enqueue input minibatches for training
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
# initialize all variables and ops
sess.run(tf.global_variables_initializer())
start_time = time.time()
# train
for step in range(1, tf.flags.FLAGS.training_steps + 1):
# check for any raised exceptions
if supervisor.should_stop():
break
train_op(sess, model, x_train, y_train, y_lengths_train)
# every 100 steps, evaluate model metrics and write summaries to disk
if step % 10 == 0 or step == tf.flags.FLAGS.training_steps:
eval_op(sess, model, x_valid, y_valid, y_lengths_valid, start_time)
start_time = time.time()
# when done, ask the threads to stop
coord.request_stop()
# wait for threads to finish
coord.join(threads)
这是我的“火车号”的代码:
def train_op(sess, model, x_minibatch, y_minibatch, y_lengths_minibatch):
"""
Training operation(s) for model.
"""
# dequeue training data
x_values, y_values, y_lengths_values = sess.run([x_minibatch, y_minibatch, y_lengths_minibatch])
# permute training data for robustness
x_values, y_values = permute_values(x_values, y_values)
# minimize loss
sess.run([model.train_op], feed_dict={model.x: x_values,
model.y_actual: y_values,
model.y_actual_lengths: y_lengths_values})
这是我的eval_op
的代码:
def eval_op(sess, model, x_minibatch, y_minibatch, y_lengths_minibatch, start_time):
"""
Evaluation operation(s) for model.
"""
x_values, y_values, y_lengths_values = sess.run([x_minibatch, y_minibatch, y_lengths_minibatch])
loss, metrics, step = sess.run([model.loss, model.metrics, model.global_step],
feed_dict={model.x: x_values,
model.y_actual: y_values,
model.y_actual_lengths: y_lengths_values})
print('Step Number: {}\tLength of Y: {}'.format(step + 1, y_lengths_values))
print('Elapsed time: {:.2f}\tLoss: {:.4f}\tAccuracy: {:.4f}'.format(time.time() - start_time, loss,
metrics['accuracy']))
打印有
RuntimeError
的堆栈跟踪应该指示错误发生时调用的函数
然而,根据您的代码,我怀疑是调用将新的op添加到图形中。因为您正在使用,所以不必调用它,因为主管(默认情况下)负责初始化变量。因此,您可以删除行
sess.run(tf.global\u variables\u initializer())
您的怀疑是正确的-谢谢!关于堆栈跟踪,你是对的-我只是找的不够多。