Как инициализировать переменные, содержащие список кортежей в тензорном потоке?

Пытаюсь работать через этот руководство.

для этой строки кода я получаю сообщение об ошибке:

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)

Ваш код не такой, как в учебнике, который вы связали. Пожалуйста, покажите ваш реальный код - мы не можем сказать вам, почему это происходит, но ясно, что 1) переменные не инициализируются и 2) global_variables_initializer() не принимает аргументов.

IanQ 18.12.2018 16:14

@IanQuah Я добавил весь код

RustyShackleford 18.12.2018 16:15

Откуда берется var_list?

IanQ 18.12.2018 16:16

@IanQuah, это была моя попытка инициализировать переменные, которые я удалил в приведенном выше примере

RustyShackleford 18.12.2018 16:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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. По-прежнему появляется та же ошибка, что и выше.

RustyShackleford 18.12.2018 16:24

Также попытался изменить tf.initialize_variables на tf.variables_initializer, все та же ошибка.

RustyShackleford 18.12.2018 16:25

Попробуйте глобальный инициализатор - это, вероятно, потому, что теперь, хотя переменные инициализированы, слои модели не

IanQ 18.12.2018 16:32

Я закомментировал 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"](Vari‌​able)]]

RustyShackleford 18.12.2018 16:36

Можете ли вы скопировать код и вставить его в исходный вопрос после его замены?

IanQ 18.12.2018 16:36

Хм, когда я запускаю вставленный код, я получаю другую ошибку. это связано с model.fit и прочим о размерах, а не о том, что он неинициализирован. AttributeError: 'Variable' object has no attribute 'ndim'

IanQ 18.12.2018 16:40

Это очень странно, я перезапускал ядро ​​несколько раз, и это все та же ошибка.

RustyShackleford 18.12.2018 16:43

Попробуйте вставить в текстовый файл и запустить его - без сохраненных сеансов или чего-то еще

IanQ 18.12.2018 16:45

Извините, я не знаю, как вам помочь. Я скажу, что теперь, поскольку вы выполнили глобальный инициализатор, пока вы не определяете какие-либо переменные tf после него, все ваши переменные должны быть инициализированы

IanQ 18.12.2018 16:50

Я починил это! замените tf.Variable на np.array. Я приму ваш ответ, если вы его измените.

RustyShackleford 18.12.2018 16:51

Другие вопросы по теме