Python、Tensorflow-未初始化变量

Python、Tensorflow-未初始化变量,python,tensorflow,Python,Tensorflow,前奏曲:我正在尝试为CIFAR10数据库(图像识别)创建一个模型,但出于某种原因,培训似乎毫无作用。在另一个线程中,有人帮助我得出结论,我的权重没有改变,也没有初始化,这可能导致问题的“不改变”部分 我试图用tf.truncated_normal函数初始化我的权重,用tf.zeros函数初始化我的权重。我创建了一些函数以使代码更易于阅读: # Creates a weight variable def weight(shape): initial = tf.truncated_norma

前奏曲:我正在尝试为CIFAR10数据库(图像识别)创建一个模型,但出于某种原因,培训似乎毫无作用。在另一个线程中,有人帮助我得出结论,我的权重没有改变,也没有初始化,这可能导致问题的“不改变”部分

我试图用
tf.truncated_normal
函数初始化我的权重,用
tf.zeros
函数初始化我的权重。我创建了一些函数以使代码更易于阅读:

# Creates a weight variable
def weight(shape):
    initial = tf.truncated_normal(shape, stddev=0.01)
    return tf.Variable(initial)

# Creates a bias variable
def bias(shape):
    initial = tf.zeros(shape=shape)
    return tf.Variable(initial)

# Creates a FCL
def hiddenLayer(prev, prev_size, size):
    W = weight([prev_size, size])
    B = bias([size])
    S = tf.nn.relu(tf.matmul(prev, W) + B)

    return W, B, S

# Creates the output layer (same but with softmax)
def outputLayer(prev, prev_size, size):
    W = weight([prev_size, size])
    B = bias([size])
    S = tf.nn.softmax(tf.matmul(prev, W) + B)

    return W, B, S
但是,变量没有初始化(因为在训练之前,当我试图打印变量时,总是会出现相应的错误)。所以,我认为这可能与函数和变量的返回有关,所以我在我的主函数中写下了所有这些乱七八糟的东西(我认为这是一件常见的事情(?):

但错误不断出现:

Traceback (most recent call last):
  File "C:\...\model.py", line 89, in <module>
    main()
  File "C:\...\model.py", line 69, in main
    print(sess.run(B3, feed_dict={data: batch_data, labels: batch_labels}) * 100, "%")
...
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use
uninitialized value Variable_5
...
回溯(最近一次呼叫最后一次):
文件“C:\…\model.py”,第89行,在
main()
文件“C:\…\model.py”,第69行,主目录
打印(sess.run(B3,feed_dict={data:batch_data,labels:batch_labels})*100,“%”)
...
tensorflow.python.framework.errors\u impl.FailedPremissionError:正在尝试使用
未初始化值变量_5
...

请记住,此错误读取的是
Variable_5
,当我尝试输出W3而不是B3时,我得到了相同的错误,但对于
Variable_4
,这是有意义的,因为它是在B3之前创建的。这意味着它不是关于某个特定变量的,而是针对所有变量的。我遗漏了什么吗?

在使用TensorFlow
会话执行变量之前,必须初始化所有变量。方法
tf.global\u variables\u initializer()
,初始化图形中机器本地的所有全局可训练变量。然而,方法
tf.local\u variables\u initializer
初始化分布式环境中共享的所有变量。两者都运行是很好的做法。请参见一个示例:

with tf.Session() as sess:
    # initialize all variables
    tf.global_variables_initializer().run()
    tf.local_variables_initializer().run()

哇,那东西藏在显眼的地方。我在初始值设定项之前添加了代码,但不知道为什么它不起作用。另外,由于我的函数位于
def main()
中,因此它们是本地函数,我使用了全局初始化器。非常感谢。
with tf.Session() as sess:
    # initialize all variables
    tf.global_variables_initializer().run()
    tf.local_variables_initializer().run()