【问题标题】:print learning rate evary epoch in sgd在 sgd 中打印每个时期的学习率
【发布时间】:2016-10-20 03:14:18
【问题描述】:

我尝试在小批量梯度下降中打印学习率。但是 Ir 在许多时期保持不变(始终为 0.10000000149)。但它应该改变每一个小批量。代码如下:

# set the decay as 1e-1 to see the Ir change between epochs.
sgd = SGD(lr=0.1, decay=1e-1, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])
class LossHistory(Callback):
    def on_epoch_begin(self, batch, logs={}):
        lr=self.model.optimizer.lr.get_value()
        print('Ir:', lr)
history=LossHistory()
model.fit(X_train, Y_train,
          batch_size= batch_size,
          nb_epoch= nb_epoch,
          callbacks= [history])

【问题讨论】:

    标签: python deep-learning keras


    【解决方案1】:

    您打印的是初始学习率,而不是在运行中计算的实际学习率:

    lr = self.lr * (1. / (1. + self.decay * self.iterations))
    

    【讨论】:

      【解决方案2】:
      from keras import backend as K
      from keras.callbacks import Callback
      
      
      class SGDLearningRateTracker(Callback):
          def on_epoch_end(self, epoch, logs={}):
              optimizer = self.model.optimizer
              lr = K.eval(optimizer.lr * (1. / (1. + optimizer.decay * optimizer.iterations)))
              print('\nLR: {:.6f}\n'.format(lr))
      

      然后在你的模型中添加回调:

      model.fit(X_train, Y_train_cat, nb_epoch=params['n_epochs'], batch_size=params['batch_size'], validation_split=0.1,callbacks=[SGDLearningRateTracker()])
      

      【讨论】:

        猜你喜欢
        • 2018-05-09
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2019-04-23
        • 2016-09-02
        • 1970-01-01
        相关资源
        最近更新 更多