python: AttributeError: не может установить атрибут для класса на основе оптимизатора keras - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь использовать класс оптимизатора на основе keras.optimizers.Optimiers. Когда я пытался определить скорость обучения. Он возвратил ошибку, сказав, что не может установить атрибут.

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

class AccumOptimizer(keras.optimizers.Optimizer):

def __init__(self, optimizer, steps_per_update=1, **kwargs):
        super(AccumOptimizer, self).__init__(**kwargs)
        self.optimizer = optimizer
        with K.name_scope(self.__class__.__name__):
            self.steps_per_update = steps_per_update
            self.iterations = K.variable(0, dtype='int64', name='iterations')
            self.cond = K.equal(self.iterations % self.steps_per_update, 0)
            self.lr = self.optimizer.lr
            self.optimizer.lr = K.switch(self.cond, self.optimizer.lr, 0.)
            for attr in ['momentum', 'rho', 'beta_1', 'beta_2']:
                if hasattr(self.optimizer, attr):
                    value = getattr(self.optimizer, attr)
                    setattr(self, attr, value)
                    setattr(self.optimizer, attr, K.switch(self.cond, value, 1 - 1e-7))
            for attr in self.optimizer.get_config():
                if not hasattr(self, attr):
                    value = getattr(self.optimizer, attr)
                    setattr(self, attr, value)

Но когда я пытался скомпилировать это в свою модель, я получил следующую ошибку:

2 model.compile(optimizer=AccumOptimizer(Adam(2e-3), 4), loss=bce_dice_loss, metrics=[dice_coef])
      3 #model.compile(optimizer=Adam(), loss=bce_dice_loss, metrics=[dice_coef])
      4 model.summary()

<ipython-input-46-066c2d3c22de> in __init__(self, optimizer, steps_per_update, **kwargs)
     24             self.iterations = K.variable(0, dtype='int64', name='iterations')
     25             self.cond = K.equal(self.iterations % self.steps_per_update, 0)
---> 26             self.lr = self.optimizer.lr
     27             self.optimizer.lr = K.switch(self.cond, self.optimizer.lr, 0.)
     28             for attr in ['momentum', 'rho', 'beta_1', 'beta_2']:

AttributeError: can't set attribute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...