首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python,Tensorflow -变量未初始化

Python,Tensorflow -变量未初始化
EN

Stack Overflow用户
提问于 2018-07-13 07:29:15
回答 1查看 58关注 0票数 0

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

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

代码语言:javascript
复制
# 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

但是,变量没有被初始化(因为我在训练之前尝试打印变量时总是得到相应的错误)。因此,我认为这可能与函数和变量的返回有关,所以我在main函数中编写了所有这些乱七八糟的东西(我认为这是常见的(?)):

代码语言:javascript
复制
#   Layer 1
    W1 = tf.Variable(tf.truncated_normal([data_size, l1_size], stddev=0.01))
    B1 = tf.Variable(tf.zeros([l1_size]))
    S1 = tf.nn.relu(tf.matmul(data, W1) + B1)

#   Layer 2
    W2 = tf.Variable(tf.truncated_normal([l1_size, l2_size], stddev=0.01))
    B2 = tf.Variable(tf.zeros([l2_size]))
    S2 = tf.nn.relu(tf.matmul(S1, W2) + B2)

#   Output Layer
    W3 = tf.Variable(tf.truncated_normal([l2_size, output_size], stddev=0.01))
    B3 = tf.Variable(tf.zeros([output_size]))
    result = tf.nn.softmax(tf.matmul(S2, W3) + B3)

但是错误不断地出现:

代码语言:javascript
复制
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
...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 07:36:38

在使用TensorFlow Session对象执行变量之前,必须初始化所有变量。tf.global_variables_initializer()方法初始化图中的所有全局可训练变量,这些变量是机器的局部变量。然而,方法tf.local_variables_initializer初始化在分布式环境中共享的所有变量。同时运行两者是一个很好的做法。请看示例:

代码语言:javascript
复制
with tf.Session() as sess:
    # initialize all variables
    tf.global_variables_initializer().run()
    tf.local_variables_initializer().run()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51315784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档