话不多说,干就完了。
问题描述:
在使用tensorflow声明变量并运行的时候,如果变量没有初始化,则运行时会报错,如下:
这是由于没有进行变量初始化操作导致的,但是存在一种情况是命名进行了变量初始化操作,但仍然出现这个错误,如下:
import tensorflow as tf
with tf.Session() as sess:
# 执行变量初始化操作(在前)
init_op = tf.global_variables_initializer()
sess.run(init_op)
# 声明变量(在后)
a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
print(sess.run(a))
上述代码命名进行了变量初始化操作,但是运行时仍然后出现变量未初始化的错误,这是由于变量初始化的位置不对导致的。
解决方法:
找到了问题的原因,解决就自然而然了。将变量初始化操作放在变量声明之后就OK了,如下:
import tensorflow as tf
# 声明变量(在前)
a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
with tf.Session() as sess:
# 执行变量初始化操作(在后)
init_op = tf.global_variables_initializer()
sess.run(init_op)
特殊情况:
下述情况,虽然变量初始化操作在变量声明操作之后执行,但是运行仍然报错。将变量声明操作移到with语句块之外问题就解决了。
import tensorflow as tf
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
# 声明变量(在前)
a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
# 执行变量初始化操作(在后)
sess.run(init_op)
print(sess.run(a))