当我试图用tf.train.Supervisor初始化参数时,它抛出了一个异常,其中网络是用tensorlayer构建的。代码如下:
init_op = tf.global_variables_initializer()
saver = tf.train.Saver()
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sv = tf.train.Supervisor(logdir=FLAGS.summary_dir, save_summaries_secs=0, saver=None)
with sv.managed_session(config=config) as sess:
init_ = sess.run(init_op)
net.print_params()
net.print_layers()
tl.layers.print_all_variables()例外情况是:
Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
Traceback (most recent call last):
File "/home/recsys/anaconda3/envs/tf1.2/lib/python3.6/site-packages/tensorlayer/layers.py", line 309, in print_params
val = p.eval()
File "/home/recsys/anaconda3/envs/tf1.2/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 463, in eval
return self._variable.eval(session=session)
File "/home/recsys/anaconda3/envs/tf1.2/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 606, in eval
return _eval_using_default_session(self, feed_dict, self.graph, session)
File "/home/recsys/anaconda3/envs/tf1.2/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3914, in _eval_using_default_session
raise ValueError("Cannot evaluate tensor using `eval()`: No default "
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "MainEntryPtb.py", line 65, in <module>
train_rnn(FLAGS)
File "/home/recsys/wangjian/learntf/TFTemplate/examples/ptb.py", line 122, in train_rnn
net.print_params()
File "/home/recsys/anaconda3/envs/tf1.2/lib/python3.6/site-packages/tensorlayer/layers.py", line 313, in print_params
raise Exception("Hint: print params details after tl.layers.initialize_global_variables(sess) or use network.print_params(False).")
Exception: Hint: print params details after tl.layers.initialize_global_variables(sess) or use network.print_params(False).似乎当我运行initialize op init_ = sess.run(init_op)时,它并不能真正工作,就好像参数已经初始化成功一样,net.print_params()不会抛出异常。我也尝试过sv = tf.train.Supervisor(logdir=FLAGS.summary_dir, save_summaries_secs=0, saver=None, init_op=tf.global_variables_initializer())来初始化参数,但同样失败了。
我使用tensorflow v1.2.1和python3.6
发布于 2018-03-18 21:32:41
这个GitHub issue已经清楚地解释了这个问题。
这不是bug,也不是"Supervisor没有成功初始化参数“。
你只要把你的会话改成interactivesession或者使用with sess.as_default,这个问题就解决了。
如果你想知道为什么会发生这个问题,你应该参考print_params定义中的tensorlayer source code:
val = p.eval(session=session)显然,eval仅用于交互会话或with sess.as_default
https://stackoverflow.com/questions/47170194
复制相似问题