В 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
Вы должны использовать,
tf.global_variables_initializer()
после запуска Session
для инициализации переменных.
Вы не определяете эти переменные в 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.]
Привет снова @mhrtsh! Похоже, вы можете добавить некоторые переменные в tf.Graph
после запуска tf.Session
, моя беда. Так или иначе, проблема заключалась в попытке инициализировать через sess.run()
некоторые переменные, ранее не определенные в tf.Graph
. Типичный подход в Tensorflow - сначала определить tf.Graph
, а затем запустить tf.Session
.
Я отредактировал свой ответ, пояснив, что проблема заключалась в том, что эти переменные не были определены в tf.Graph
перед их инициализацией.
Перед инициализацией всех переменных функция 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))
Основываясь на предложении lishu, проблема заключалась в вызове функции foo, а не графика.