Tensorflow初始化变量

时间:2018-05-01 19:13:26

标签: python tensorflow

我只是想看到我的输出到目前为止,但我无法让我的变量初始化,相同的功能在另一个笔记本中工作,但在这一个不起作用。我尝试了两种方法并不断获取:

FailedPreconditionError: Attempting to use uninitialized value Variable.

我使用的是1.2.1。

mnist = input_data.read_data_sets('./', one_hot=True)

n1=500

n2=300

nclasses=10

batchsize=100

def layers(data):

    layer1={'weights':tf.Variable(tf.random_normal([784,n1])),
                                  'bias':tf.Variable(tf.random_normal([n1]))}

    layer2={'weights':tf.Variable(tf.random_normal([n1,n2])),
                                  'bias':tf.Variable(tf.random_normal([n2]))}
    output={'weights':tf.Variable(tf.random_normal([n2,nclasses])),
                                  'bias':tf.Variable(tf.random_normal([nclasses]))}

    l1=tf.add(tf.matmul(data,layer1['weights']),layer1['bias'])
    l1=tf.nn.relu(l1)

    l2=tf.add(tf.matmul(l1,layer2['weights']),layer2['bias'])
    l2=tf.nn.relu(l2)

    output=tf.add(tf.matmul(l2,output['weights']),output['bias'])

    return output

session=tf.Session().   

session.run(tf.global_variables_initializer())

result=session.run(layers(mnist.test.images))


print(type(result))

尝试过 -

with tf.Session() as sess:

    session.run(tf.global_variables_initializer())

    result=sess.run(layers(mnist.test.images))

    print(type(result))

2 个答案:

答案 0 :(得分:1)

您的问题是图表是在函数调用layers中构建的。但是,在构建图形之前,您已初始化所有变量

因此,你需要写

output_op = layers(mnist.test.images)
session.run(tf.global_variables_initializer())
result = session.run(output_op)

OP)

然后构造图形并且TensorFlow可以初始化所有变量。完整的工作示例:

import tensorflow as tf
import numpy as np


def fake_mnist():
    return np.random.randn(1, 28 * 28)

n1 = 500
n2 = 300
nclasses = 10
batchsize = 100


def layers(data):

    layer1 = {'weights': tf.Variable(tf.random_normal([784, n1])),
              'bias': tf.Variable(tf.random_normal([n1]))}

    layer2 = {'weights': tf.Variable(tf.random_normal([n1, n2])),
              'bias': tf.Variable(tf.random_normal([n2]))}
    output = {'weights': tf.Variable(tf.random_normal([n2, nclasses])),
              'bias': tf.Variable(tf.random_normal([nclasses]))}

    l1 = tf.add(tf.matmul(data, layer1['weights']), layer1['bias'])
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(l1, layer2['weights']), layer2['bias'])
    l2 = tf.nn.relu(l2)

    output = tf.add(tf.matmul(l2, output['weights']), output['bias'])

    return output


with tf.Session() as sess:
    data_inpt = tf.placeholder(tf.float32)
    output_op = layers(data_inpt)

    sess.run(tf.global_variables_initializer())

    result = sess.run(output_op, {data_inpt: fake_mnist()})
    print(type(result))
    print(result)

我非常怀疑,您的代码是在任何其他笔记本文件中运行的。我想在其他笔记本文件中你已经多次layers执行了单元格,这样在tf.global_variables_initializer的第二次调用中,图形中的变量已经存在。但是你发布的代码绝对不正确。

答案 1 :(得分:-1)

因为你提到代码在另一个笔记本上工作,所以它可能是版本问题,所以不要使用session.run(tf.global_variables_initializer()),而是尝试session.run(tf.initialize_all_variables()),btw tf.initialize_all_variables()目前已被弃用。< / p>