Keras:使用Adadelta优化器时学习率如何变化?

时间:2017-05-18 15:37:03

标签: python machine-learning deep-learning keras

例如,我在编译网络模型时使用Adadelta作为优化器,然后learning rate会在rule之后发生变化(但是iterations是什么?)以及怎样才能我将学习率值记录到控制台?

model.compile(loss=keras.losses.mean_squared_error,
        optimizer= keras.optimizers.Adadelta())

documentation lr刚开始学习率?

2 个答案:

答案 0 :(得分:3)

该规则与衰减更新有关。 Adadelta是一种自适应学习速率方法,它使用指数衰减的梯度平均值。

答案 1 :(得分:1)

看看Keras source code,学习率是根据像这样的衰减重新计算的:

lr = self.lr
if self.initial_decay > 0:
    lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay))))

是的,lr才刚刚开始学习。

要在每个纪元后打印它(如@orabis所述),您可以创建一个回调类:

class YourLearningRateTracker(Callback):
    def on_epoch_end(self, epoch, logs=None):
        lr = self.model.optimizer.lr
        decay = self.model.optimizer.decay
        iterations = self.model.optimizer.iterations
        lr_with_decay = lr / (1. + decay * K.cast(iterations, K.dtype(decay)))
        print(K.eval(lr_with_decay))

,然后在调用model.fit()时将其实例添加到回调中,例如:

model.fit(..., callbacks=[YourLearningRateTracker()])

但是,请注意,默认情况下,Adadelta的decay参数为零,并且不属于“标准”参数,因此,使用默认参数时,您的学习率不会更改其值。 我怀疑衰变不适用于Adadelta。

另一方面,rho参数(默认情况下为非零)不会描述学习率的衰减,而是对应于每个时间步长要保留的梯度分数(根据{ {3}})。

我通过询问Keras documentation找到了this Github issue上的一些相关信息。