Я использую 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)]]
Вы должны инициализировать переменные, используемые 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 управляют переменными, чтобы лучше справляться с этими вещами :)
FailedPreconditionError (см. Выше для traceback): Попытка использовать неинициализированное значение mean_squared_error/count
Значение, count
из приведенной выше ошибки, является одной из локальных переменных metrics.mean_squared_error
используется для вычисления MSE (другое - count
). Поэтому вам нужно инициализировать локальные переменные, используя:
sess.run(tf.local_variables_initializer())
local_variables_initializer
вместо global_variables_initializer
?
tf.metrics.mean_squared_error
использует локальные переменные? Я также заметил, что если я используюtf.global_variables_initializer()
по себе, я получаю ту же ошибку, но если я используюtf.local_variables_initializer()
по себе, проблема решается.tf.metrics.mean_squared_error
, поэтому, когда он сказал, что переменная внутри (count) была неинициализирована, это был справедливый шанс, что она была локальной, а не Глобальный. (Локальные переменные не будут сохранены заставкой).