我在优化器Adam中设置了学习率衰减,例如
LR = 1e-3
LR_DECAY = 1e-2
OPTIMIZER = Adam(lr=LR, decay=LR_DECAY)
喀拉拉邦文献Adam指出,每个时期的学习率都是
lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay))))
如果我理解正确,学习率就是这样,
lr = lr * 1 / ( 1 + num_epoch * decay)
但是在看到打印出来后,我看不到学习率衰减开始生效。 我用这个有什么问题吗?
修改
我通过设置ReduceLROnPlateau
的详细信息(例如
ReduceLROnPlateau(monitor='val_loss', factor=0.75, patience=Config.REDUCE_LR_PATIENCE, verbose=1, mode='auto', epsilon=0.01, cooldown=0, min_lr=1e-6
这将监视val损耗并通过乘以factor
来降低学习率。
印刷学习率是这样的
Epoch 00003: ReduceLROnPlateau reducing learning rate to 0.0007500000356230885.
我将初始学习率设置为1e-3。因此,学习率似乎从1e-3变为1e-3 * 0.75,因此我怀疑我在Adam中设置的decay
无效。
答案 0 :(得分:1)
学习率随每次迭代(即每批而不是每个时期)而变化。因此,如果您将衰减设置为1e-2,并且每个时期有100个批次/迭代,那么在1个时期之后,您的学习率将为
lr = init_lr * 1/(1 + 1e-2 * 100)
因此,如果我希望在每个时期结束时我的学习率是原始学习率的0.75,则可以将lr_decay设置为
batches_per_epoch = dataset_size/batch_size
lr_decay = (1./0.75 -1)/batches_per_epoch
这似乎对我有用。同样,由于每次迭代都会计算新的学习率,因此优化程序不会更改学习率变量的值,而是始终使用初始学习率来计算有效学习率。