Есть ли замена для global_step в TensorFlow 2.0?

#tensorflow2.0

#tensorflow2.0

Вопрос:

Похоже, что global_step отсутствует в TensorFlow 2.0.

У меня есть несколько обратных вызовов, которые заинтересованы в текущем прогрессе обучения, и я не уверен, нужно ли мне внедрять свой собственный счетчик шагов или вместо этого зависеть от количества эпох…

Какие-либо рекомендации по замене?

Ответ №1:

Прямо сейчас лучше объявить наш собственный global_step = tf.Variable(1, name="global_step") и использовать его вручную.

Если посмотреть на документацию, то там нет встроенной замены для tf.train.get_or_create_global_step , и единственная часть документации, которая касается step , — это экспериментальный раздел tf.summary модуля: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/summary/experimental

Ответ №2:

Работает в TensorFlow 2.3.1 и его Keras API.

Экземпляры tf.keras.optimizers.Optimizer наследуют iterations свойство. Реализация показывает, что это счетчик, который увеличивается после каждого шага обучения. Получите доступ к нему из оптимизатора перед компиляцией модели.

 import tensorflow as tf

tf.compat.v1.disable_eager_execution()  # see note

optimizer = tf.keras.optimizers.Adam()
training_step = optimizer.iterations

model = Model(inputs,outputs)
model.compile(
    loss=my_adaptive_loss_function(training_step),
    optimizer=optimizer)
  

Примечание: В моей настройке мне пришлось отключить быстрое выполнение, чтобы использовать эту переменную, иначе я получил следующее TypeError . Возможно, вам удастся избежать этого, если ваша реализация менее запутанная, чем моя.

Ошибка типа: передается операция вне кода построения функции 
тензор "Графика". Возможно иметь тензоры графов 
утечка из контекста построения функции путем включения 
tf.init_scope в коде построения вашей функции.
Например, следующая функция завершится ошибкой:
 @tf.function 
 в def есть функция_init_scope(): 
 my_constant = tf.constant(1.)
 с помощью tf.init_scope(): 
 добавлено = my_constant * 2
Тензор графика имеет имя: pulse_features:0

Во время обработки вышеупомянутого исключения возникло другое исключение: