查看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 才刚刚开始学习率。
要在每个 epoch 之后打印它,正如@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 参数,默认为非零,不描述学习率的衰减,而是对应于每个时间步要保持的梯度分数(根据Keras documentation )。
我在this Github issue上找到了一些相关信息,并通过询问similar question。