Оптимизация только определенных переменных модели, работающих с TensorFlow Estimator API - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно заморозить части моей модели и обучить только определенным переменным.Теперь, с помощью низкоуровневого API, я могу просто передать var_list методу tf.train.Optimizer.minimize.Но когда я использую Оценщик TensorFlow, я могу пропустить только сам оптимизатор, который затем используется для минимизации потерь во внутреннем цикле Оценщика.

Единственное решение, которое мне приходит в голову, - это определить собственный оптимизатор и переопределить метод Optimizer.minimize.Примерно так:

def minimize(self, *args, **kwargs):
    print("Inside...")
    if not kwargs['var_list']:
       kwargs['var_list'] = self.var_list

    return super(MyOptimizer, self).minimize(*args, **kwargs)

Теперь я ожидал увидеть фразу "Внутри ...", которая будет напечатана на экране на каждом этапе тренировки;особенно когда я вижу, что модель тренируется просто отлично.Это как бы показывает мне, что моя minimize функция полностью игнорируется, и я не могу понять, почему.

Итак, даже правильно ли переопределить minimize или есть лучший способ сделать это?это с оценщиками?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете просто сделать пользовательский оценщик, указав функцию model_fn

    def model_fn(features, labels, mode):
      logits = model_architecture(features)
      loss = loss_function(logits, labels)
      if mode == tf.estimator.ModeKeys.TRAIN:
        optimizer = optimizer
        train_op = ontimizer.minimize(loss=loss, 
                                      global_step=global_step,
                                      var_list=variables_to_minimize)

      return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
...