Сеанс Tensorflow не выполняет функцию

1

Я использую Tensorflow placeholder для вычисления, но Tensorflow сообщает мне, что у меня есть ошибка инициализации.

import tensorflow as tf
import numpy as np

al = np.array([2.5, 0.0, 2, 8],dtype=float)
bl = np.array([3, -0.5, 2, 7],dtype=float)

sess = tf.Session()

a = tf.placeholder(dtype='float32')
b = tf.placeholder(dtype='float32')


c = tf.metrics.mean_squared_error(a,b)
d = sess.run(c, {a: al, b:bl } )

Я не вижу, где моя ошибка. Сообщение об ошибке:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value mean_squared_error/count
     [[Node: mean_squared_error/count/read = Identity[T=DT_FLOAT, _class=["loc:@mean_squared_error/AssignAdd_1"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](mean_squared_error/count)]]
Теги:
tensorflow
numpy

2 ответа

1
Лучший ответ

Вы должны инициализировать переменные, используемые tf.metrics.mean_squared_error:

import tensorflow as tf
import numpy as np

a = tf.placeholder(dtype='float32')
b = tf.placeholder(dtype='float32')
c = tf.metrics.mean_squared_error(a,b)
sess = tf.Session()
# Initialise the local variables
init_local = tf.local_variables_initializer()
sess.run(init_local)
# Initialise the global variables (not really needed here)
# But you'll probably need it in the future when using tensorflow:
init_global = tf.global_variables_initializer()
sess.run(init_global)

al = np.array([2.5, 0.0, 2, 8],dtype=float)
bl = np.array([3, -0.5, 2, 7],dtype=float)
d = sess.run(c, {a: al, b:bl } )

В качестве альтернативы, в этом случае вы можете использовать tf.losses.mean_squared_error.

Я бы посмотрел, как программисты-программисты tenorflows управляют переменными, чтобы лучше справляться с этими вещами :)

  • 0
    Спасибо. Но как вы узнали, что tf.metrics.mean_squared_error использует локальные переменные? Я также заметил, что если я использую tf.global_variables_initializer() по себе, я получаю ту же ошибку, но если я использую tf.local_variables_initializer() по себе, проблема решается.
  • 1
    @ImranRashid было бы бессмысленно использовать переменные, которые могут быть сохранены и восстановлены внутри, в tf.metrics.mean_squared_error , поэтому, когда он сказал, что переменная внутри (count) была неинициализирована, это был справедливый шанс, что она была локальной, а не Глобальный. (Локальные переменные не будут сохранены заставкой).
Показать ещё 1 комментарий
1

FailedPreconditionError (см. Выше для traceback): Попытка использовать неинициализированное значение mean_squared_error/count

Значение, count из приведенной выше ошибки, является одной из локальных переменных metrics.mean_squared_error используется для вычисления MSE (другое - count). Поэтому вам нужно инициализировать локальные переменные, используя:

sess.run(tf.local_variables_initializer())
  • 0
    Спасибо Виджай. Это также сработало, но как вы узнали, что вы используете local_variables_initializer вместо global_variables_initializer ?
  • 2
    Вам не нужен global_variables_initializer, ошибка связана с локальными переменными, я добавил ссылку в свой ответ, там вы можете найти подробную информацию о двух локальных переменных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню