简化代码如下:
class ExModel(object):
def __init__(self, graph=None):
if graph is None:
self.graph = tf.get_default_graph()
else:
self.graph = graph
self.sess = tf.Session(graph=self.graph)
self.init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
self.build_model()
print(self.sess.run(tf.report_uninitialized_variables())) # [b'global_step']
print(self.sess.run(self._global_step)) # uninitialized error
def build_model(self):
with self.graph.as_default():
self._global_step = tf.Variable(0, trainable=False, name='global_step')
self.sess.run(self.init_op)
if __name__ == '__main__':
model = ExModel()
它显示use uninitialized value
错误。
与下面的代码似乎没什么区别,但它可以很好地运作。
if __name__ == '__main__':
# model = ExModel()
graph = tf.get_default_graph()
sess = tf.Session(graph=graph)
with graph.as_default():
global_step = tf.Variable(0, trainable=False, name='global_step')
sess.run(tf.global_variables_initializer())
print(sess.run(global_step))
请帮助我,问题一整天都折磨着我。
我读过另一个question。我认为我的错误是熟悉它,但我不知道如何使global_variables_initializer
与会话相同的图形关联,我只使用默认图形。
我发现何时使用self.sess.run(tf.global_variables_initializer())
替换
self.init_op = tf.global_variables_initializer()
self.sess.run(self.init_op)
可以很好地运作。但我仍然不知道原因。
答案 0 :(得分:0)
问题是init_op = tf.global_variables_initializer()
应该在所有变量的最后定义。
应该是
global_step = tf.Variable(0, trainable=False, name='global_step')
...
init_op = tf.global_variables_initializer()
sess.run(init_op)
但不是
init_op = tf.global_variables_initializer()
global_step = tf.Variable(0, trainable=False, name='global_step')
...
sess.run(init_op)