Можете ли вы извлечь текущую скорость обучения из tf.keras.Adam? - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу поэкспериментировать с распадом во время обучения, используя реализацию keras Tensorflow и Адама.Похоже, что model.optimizer.lr является только базовой скоростью обучения и не изменяется с затуханием.Для мониторинга и визуализации было бы обнадеживающим видеть фактическое значение в использовании.Может ли он быть получен напрямую (без параллельного расчета и при условии, что вы правильно делаете математику)?

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете попробовать этот код.Это адаптировано из исходного кода Keras.Я не проверял это сам.

class AdamLearningRateTracker(Callback):
    def on_epoch_end(self, logs={}):
        beta_1 = self.beta_1, 
        beta_2 = self.beta_2
        optimizer = self.model.optimizer
        if optimizer.decay > 0:
            lr = K.eval(optimizer.lr * (1. / (1. + optimizer.decay * optimizer.iterations)))
        t = K.cast(optimizer.iterations, K.floatx()) + 1
        lr_t = lr * (K.sqrt(1. - K.pow(beta_2, t)) /(1. - K.pow(beta_1, t)))
        print('lr: {:.6f}\n'.format(lr_t))
...