Переменные инициализации Tensorflow - PullRequest
0 голосов
/ 01 мая 2018

Я пока просто хочу посмотреть свой вывод, но не могу инициализировать мои переменные, та же самая функция, которая работала в другом блокноте, но не работает в этом. Я попробовал два способа и продолжаю получать:

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 голосов
/ 02 мая 2018

Ваша проблема в том, что график строится в вызове функции layers. Но вы инициализировали все переменные до того, как построите свой график.

Следовательно, вам нужно написать

output_op = layers(mnist.test.images)
session.run(tf.global_variables_initializer())
result = session.run(output_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 переменные в графе уже существуют. Но код, который вы разместили, определенно не верен.

0 голосов
/ 02 мая 2018

, так как вы упомянули, что код работает на другом ноутбуке, поэтому это может быть проблемой с версией tf, поэтому вместо использования session.run(tf.global_variables_initializer()) попробуйте session.run(tf.initialize_all_variables()), кстати, tf.initialize_all_variables () в настоящее время устарела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...