Когда global_variables_initializer() действительно требуется

import tensorflow as tf
x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
# model = tf.global_variables_initializer()
with tf.Session() as session:
        print("x = ", session.run(x)) 
        # session.run(model)
        print("y = ", session.run(y))

Я не мог понять, когда на самом деле требуется global_variables_initializer(). В приведенном выше коде, если мы раскомментируем строки 4 и 7, я могу выполнить код и увидеть значения. Если я буду работать как есть, я вижу крах.

Мой вопрос в том, какие переменные он инициализирует. x - константа, которая не нуждается в инициализации, а y является переменной, которая не инициализируется, а используется как арифметическая операция.

Ответ 1

tf.global_variables_initializer - это ярлык для инициализации всех глобальных переменных. Это не требуется, и вы можете использовать другие способы инициализации своих переменных или, в случае простых сценариев, иногда вам не нужно их инициализировать вообще.

Все, кроме переменных, не требует инициализации (константы и заполнители). Но каждая используемая переменная (даже если она является константой) должна быть инициализирована. Это даст вам ошибку, хотя z - всего лишь 0-й тензор с одним числом.

import tensorflow as tf
z = tf.Variable(4)
with tf.Session() as session:
        print(session.run(z)) 

Я выделил используемое слово, потому что, если у вас просто есть переменные, которые не выполняются (или не зависит от них), вам не нужно их инициализировать.


Например, этот код будет выполняться без каких-либо проблем, тем не менее он имеет 2 переменные и одну операцию, которая зависит от них. Но бег не требует их.

import tensorflow as tf
x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
z = tf.Variable(4)
a = y + z
with tf.Session() as session:
        print("x = ", session.run(x)) 

Ответ 2

Из документов (акцент мой):

Вызов tf.Variable() добавляет несколько операций на график:

  • Переменная op, которая содержит значение переменной.
  • Инициализатор op, который устанавливает переменную в ее начальное значение. Это фактически tf.assign op.
  • Опции для начального значения, такие как нули op для переменной смещений в примере, также добавляются в график.

Потом,

Инициализаторы переменных должны запускаться явно до того, как другие операционные системы в вашей модели могут быть запущены. Самый простой способ сделать это - добавить op, который запускает все инициализаторы переменных, и запустить этот op перед использованием модели.

Короче говоря, global_variables_initializer никогда не требуется, Variable инициализация. Всякий раз, когда у вас есть Variables в коде, вы должны сначала их инициализировать. global_variables_initializer инициализирует все Variables, которые были ранее объявлены, и, следовательно, просто очень удобный способ сделать это.

Ответ 3

Это никогда не требуется, если вы не используете объявленный tf.Variable или tf.placeholder из своего сеанса сеанса tensorflow. Лично у меня всегда есть привычка запускать tf.global_variables_initializer(). Он почти становится частью кода плиты котла при работе моделей тензорного потока:

with tf.Session(graph=graph) as sess:
    sess.run(tf.global_variables_initializer())

    # run model etc...

Ответ 4

tf.global_variables_initializer просто инициализирует все переменные, которые будут перечислены tf.global_variables(). Это действительно имеет смысл в распределенной среде, где граф может находиться в разных вычислительных узлах кластера.

В таком случае tf.global_variables_initializer() который является просто псевдонимом для tf.variables_initializer(tf.global_variables()), инициализирует все переменные во всех вычислительных узлах, где размещается граф.