Как инициализировать переменные, определенные в функции tenorflow? - PullRequest
0 голосов
/ 02 мая 2018

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

import tensorflow as tf

def foo():
    x = tf.Variable(tf.ones([1]))
    y = tf.ones([1])
    return x+y

if __name__ == '__main__':
    with tf.Session() as sess:
        init = tf.global_variables_initializer()
        sess.run(init)
        print(sess.run(foo()))

Выполнение кода приводит к следующей ошибке:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable

Ответы [ 3 ]

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

Вы не определяете эти переменные по умолчанию tf.Graph перед их инициализацией.

import tensorflow as tf


def foo():
    x = tf.Variable(tf.ones([1]))
    y = tf.ones([1])
    return x + y


if __name__ == '__main__':
    with tf.Graph().as_default():
        result = foo()
        with tf.Session() as sess:
            init = tf.global_variables_initializer()
            sess.run(init)
            print(sess.run(result))

Этот код определяет переменные в tf.Graph перед инициализацией их в соответствии с запросом, поэтому вы можете выполнить их с ваших tf.Session до sess.run().

Выход:

[2].

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

Прежде чем инициализировать все переменные, функция foo () вообще не была вызвана. Поэтому он не может инициализировать переменные в foo (). Нам нужно вызвать функцию перед запуском сессии.

import tensorflow as tf

def foo():
    x=tf.Variable(tf.zeros([1]))
    y=tf.ones([1])
    return x+y

with tf.Session() as sess:
    result=foo()
    init=tf.global_variables_initializer()
    sess.run(init)
    print(sess.run(result))
0 голосов
/ 02 мая 2018

Вы должны использовать,

tf.global_variables_initializer()

после запуска Session для инициализации переменных.

Переменная Tensorflow

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