Есть ли способ получить текущую скорость обучения от оценщика - PullRequest
0 голосов
/ 16 февраля 2020

Я бы хотел отслеживать скорость обучения во время тренировок с Estimator (TPUEstimator на ТПУ, из всех вещей). Я экспериментирую с примером Colab MNIST . Я подумал, что создам тренировочный хук, который будет регистрировать скорость обучения. Вот мой код:

class TrainHook(tf.train.SessionRunHook):
    def __init__(self, optimizer):
        self.optimizer = optimizer

    def after_create_session(self, session, coord):
        self.session = session

    def before_run(self, run_context):
        # optimizer is a CrossShardOptimizer (see notebook), hence ._opt
        logger.info('Learning rate is {}'.format(
            self.optimizer._opt._lr.eval(session=self.session))

optimizer был создан следующим образом в model_fn (скопировано из записной книжки):

step = tf.train.get_or_create_global_step()
lr = 0.0001 + tf.train.exponential_decay(0.01, step, 2000//8, 1/math.e)
optimizer = tf.train.AdamOptimizer(lr)
if params['use_tpu']:
    optimizer = tf.contrib.tpu.CrossShardOptimizer(optimizer)

К сожалению, когда я запускаю этот код, я получить следующую ошибку: «Ошибка, зарегистрированная с training_l oop: операция« add_1 »помечена как недоступная для извлечения». Очевидно, _opt._lr является операцией add_1 из-за exponential_decay. По крайней мере, на ТПУ; когда я устанавливаю обычный Tensorflow на свой ноутбук, это оператор add; может ли это быть разницей?

Я знаю , что даже если бы я мог ее получить, _lr - это не текущая, а базовая скорость обучения. Но это начало. :)

Примечание: _lr и _lr_t ведут себя одинаково, так как оба результата приводят к указанной выше ошибке.

Я использую tenorflow v1.14.

...