Пытаюсь работать через этот руководство.
для этой строки кода я получаю сообщение об ошибке:
model.fit(training_x, training_y, epochs=1000, steps_per_epoch=10)
FailedPreconditionError: Attempting to use uninitialized value Variable_2
[[{{node Variable_2/read}} = Identity[T=DT_INT32, _device = "/job:localhost/replica:0/task:0/device:CPU:0"](Variable_2)]]
Как мне инициализировать список кортежей в тензорном потоке?
Я попытался изменить эту строку кода с:
training_y = tf.Variable([[0], [0], [1], [1], [1], [0], [1],[0], [1], [1], [1], [1], [1], [0]])
к:
training_y = tf.global_variables_initializer([[0], [0], [1], [1], [1], [0], [1],[0], [1], [1], [1], [1], [1], [0]])
но получаю ошибку:
TypeError: global_variables_initializer() takes 0 positional arguments but 1 was given
что я делаю не так, чтобы инициализировать переменную?
весь код:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential()
input_layer = keras.layers.Dense(3, input_shape=[3], activation='tanh')
model.add(input_layer)
output_layer = keras.layers.Dense(1, activation='sigmoid')
model.add(output_layer)
gd = tf.train.GradientDescentOptimizer(0.01)
model.compile(optimizer=gd, loss='mse')
training_x = tf.Variable([[1, 1, 0], [1, 1, 1], [0, 1, 0], [-1, 1, 0], [-1, 0, 0], [-1, 0, 1],[0, 0, 1], [1, 1, 0], [1, 0, 0], [-1, 0, 0], [1, 0, 1], [0, 1, 1], [0, 0, 0], [-1, 1, 1]])
training_y = tf.Variable([[0], [0], [1], [1], [1], [0], [1],[0], [1], [1], [1], [1], [1], [0]])
model.fit(training_x, training_y, epochs=1000, steps_per_epoch=10)
# model.save_weights('demo_model.h5')
# model.load_weights('demo_model.h5')
text_x = tf.Variable([[1, 0, 0]])
test_y = model.predict(text_x, verbose=0, steps=1)
print(test_y)
Обновленный код:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential()
input_layer = keras.layers.Dense(3, input_shape=[3], activation='tanh')
model.add(input_layer)
output_layer = keras.layers.Dense(1, activation='sigmoid')
model.add(output_layer)
gd = tf.train.GradientDescentOptimizer(0.01)
model.compile(optimizer=gd, loss='mse')
sess = tf.Session() #NEW LINE
training_x = tf.Variable([[1, 1, 0], [1, 1, 1], [0, 1, 0], [-1, 1, 0], [-1, 0, 0], [-1, 0, 1],[0, 0, 1], [1, 1, 0], [1, 0, 0], [-1, 0, 0], [1, 0, 1], [0, 1, 1], [0, 0, 0], [-1, 1, 1]])
training_y = tf.Variable([[0], [0], [1], [1], [1], [0], [1],[0], [1], [1], [1], [1], [1], [0]])
#init_op = tf.initialize_variables([training_x, training_y])
init_op = tf.initializers.global_variables()
sess.run(init_op) #NEW LINE
model.fit(training_x, training_y, epochs=1000, steps_per_epoch=10)
# model.save_weights('demo_model.h5')
# model.load_weights('demo_model.h5')
text_x = tf.Variable([[1, 0, 0]])
test_y = model.predict(text_x, verbose=0, steps=1)
print(test_y)
@IanQuah Я добавил весь код
Откуда берется var_list
?
@IanQuah, это была моя попытка инициализировать переменные, которые я удалил в приведенном выше примере
sess = tf.Session() #NEW LINE
training_x = tf.Variable([[1, 1, 0], [1, 1, 1], [0, 1, 0], [-1, 1, 0], [-1, 0, 0], [-1, 0, 1],[0, 0, 1], [1, 1, 0], [1, 0, 0], [-1, 0, 0], [1, 0, 1], [0, 1, 1], [0, 0, 0], [-1, 1, 1]])
training_y = tf.Variable([[0], [0], [1], [1], [1], [0], [1],[0], [1], [1], [1], [1], [1], [0]])
init_op = tf.initialize_variables([training_x, training_y, test_x, test_y]) #NEW LINE
sess.run(init_op) #NEW LINE
model.fit(training_x, training_y, epochs=1000, steps_per_epoch=10)
# model.save_weights('demo_model.h5')
# model.load_weights('demo_model.h5')
text_x = tf.Variable([[1, 0, 0]])
test_y = model.predict(text_x, verbose=0, steps=1)
print(test_y)
Надеюсь, вы справитесь с проблемой "неинициализированных переменных".
По сути, проблема, с которой вы столкнулись, заключается в том, что TF - это оболочка для C++. Итак, чтобы справиться с некоторыми вопросами оптимизации, они требуют, чтобы вы: 1) определили все переменные, 2) инициализировали их ПЕРЕД выполнением каких-либо операций. Следовательно, вы столкнулись с проблемой
model.fit(training_x, training_y, epochs=1000, steps_per_epoch=10)
дает вам ошибку "неинициализированные переменные".
Надеюсь это поможет!
Я удалил test_x
и test_y
из линейки init_op
. По-прежнему появляется та же ошибка, что и выше.
Также попытался изменить tf.initialize_variables
на tf.variables_initializer
, все та же ошибка.
Попробуйте глобальный инициализатор - это, вероятно, потому, что теперь, хотя переменные инициализированы, слои модели не
Я закомментировал tf.initialize_variable
и попробовал tf.initializers.global_variables()
. Он прошел через эпоху 1/1000
, но затем выдал мне эту ошибку FailedPreconditionError: Attempting to use uninitialized value Variable [[{{node Variable/read}} = Identity[T=DT_INT32, _device = "/job:localhost/replica:0/task:0/device:CPU:0"](Variable)]]
Можете ли вы скопировать код и вставить его в исходный вопрос после его замены?
Хм, когда я запускаю вставленный код, я получаю другую ошибку. это связано с model.fit
и прочим о размерах, а не о том, что он неинициализирован. AttributeError: 'Variable' object has no attribute 'ndim'
Это очень странно, я перезапускал ядро несколько раз, и это все та же ошибка.
Попробуйте вставить в текстовый файл и запустить его - без сохраненных сеансов или чего-то еще
Извините, я не знаю, как вам помочь. Я скажу, что теперь, поскольку вы выполнили глобальный инициализатор, пока вы не определяете какие-либо переменные tf после него, все ваши переменные должны быть инициализированы
Я починил это! замените tf.Variable
на np.array
. Я приму ваш ответ, если вы его измените.
Ваш код не такой, как в учебнике, который вы связали. Пожалуйста, покажите ваш реальный код - мы не можем сказать вам, почему это происходит, но ясно, что 1) переменные не инициализируются и 2)
global_variables_initializer()
не принимает аргументов.