例如,我在编译网络模型时使用Adadelta
作为优化器,然后learning rate
会在rule之后发生变化(但是iterations
是什么?)以及怎样才能我将学习率值记录到控制台?
model.compile(loss=keras.losses.mean_squared_error,
optimizer= keras.optimizers.Adadelta())
在documentation lr
刚开始学习率?
答案 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上的一些相关信息。