交互式IPython终端中连续运行的Tensorflow Op命名

时间:2016-06-21 03:12:32

标签: python ipython tensorflow

我注意到在后续运行的Tensorflow脚本中,您的图形Ops会获得编号名称,例如:

loss = tf.reduce_mean(tf.nn.l2_loss(y - pred), name="l2_loss")

会得到名字:

l2_loss
l2_loss_1
l2_loss_2
...
l2_loss_N

继续在同一个IPython会话中进行相同的运行。这不会太烦人,除了稍后在脚本中要保存摘要时:

x_sample, y_sample = get_sample(X, Y)
feed = {x: x_batch, y: y_batch}
trainer.run(feed_dict=feed)
summary_str = summary_op.eval(feed_dict=feed)

你会得到以下失败:

InvalidArgumentError: You must feed a value for placeholder tensor 'x_input' with dtype float ....

有没有办法(在脚本或其他东西的顶部)取消所有这些旧的,过时的Op定义并使用当前运行并在创建变量时正确遵守name=...命令,占位符和常量?

2 个答案:

答案 0 :(得分:7)

对于您的后续问题,由于重新定义了您的互动会话,您可能会收到AssertionError

sess = InteractiveSession()
sess = InteractiveSession()
Exception AssertionError: AssertionError("Nesting violated for default stack of <type 'weakref'> objects") in ...

您可以先关闭会话sess.close()

来避免这种情况

答案 1 :(得分:3)

您可能希望将tf.reset_default_graph()添加到设置图表的脚本的开头。这将从默认图表中删除所有现有的张量,变量和操作。这样,以前执行的脚本不会干扰。

我不确定,如果您收到的错误消息与此有关。您确定不会忘记为占位符x_input提供值吗?您正在为占位符x提供食物,如果可能是x_input