Keras 乐观主义者如何适应定制学习率?

Keras 乐观主义者如何适应定制学习率?,keras,Keras,我很难理解优化者如何使用LearningRateScheduler定义的自定义学习率。查看SGD的源代码,参数似乎仅受其自身参数的影响(例如,self.lr): def get_更新(self、loss、params): 梯度=自身。获取梯度(损失,参数) self.updates=[K.update\u add(self.iterations,1)] lr=self.lr 如果自初始衰减>0: lr*=(1./(1.+自衰变*K.cast(自衰变), K.d类型(自衰变) #动力 shapes

我很难理解
优化者如何使用
LearningRateScheduler
定义的自定义学习率。查看
SGD
的源代码,参数似乎仅受其自身参数的影响(例如,
self.lr
):

def get_更新(self、loss、params):
梯度=自身。获取梯度(损失,参数)
self.updates=[K.update\u add(self.iterations,1)]
lr=self.lr
如果自初始衰减>0:
lr*=(1./(1.+自衰变*K.cast(自衰变),
K.d类型(自衰变)
#动力
shapes=[K.int_shape(p)表示参数中的p]
矩=[K.零(形状)表示形状中的形状]
self.weights=[self.iterations]+时刻
对于拉链中的p、g、m(参数、梯度、力矩):
v=自动量*m-lr*g#速度
self.updates.append(K.update(m,v))
如果self.nesterov:
新p=p+self.momentary*v-lr*g
其他:
新的p=p+v
...

如果使用以下方法调用了fit_生成器

def阶跃衰减(历元):
初始速率=0.01
落差=0.5
纪元下降=10.0
lrate=初始值*math.pow(下降,数学地板((1+epoch)/时代下降))
返回lrate
lr_调度程序=LearningRateScheduler(步骤_)
1.2型拟合发生器(
...
回调=[lr_调度程序],
...)
是否以某种方式覆盖了初始化优化程序时使用的原始学习速率?在某种程度上似乎是这样。我尝试了以下打印机:

class LearningRatePrinter(回调):
def初始化(自):
super(LearningRatePrinter,self).init()
def on_epoch_begin(self、epoch、logs={}):
打印('lr:',sess.run(optimizer.lr))
lr_打印机=LearningRatePrinter()

使用
callbacks=[lr\u调度程序,lr\u打印机,]
调用
fit\u generator()
。对于每个历元,我得到的是
lr:0.01
。当然,
lr\u printer
打印成员变量
lr
,但是如何使用
lr\u调度程序
自定义学习速率值?没有迹象表明它实际被使用。

您确定打印的变量正确吗?你的代码对我来说很好
lr:0.005
在第10个纪元后打印,
lr:0.0025
在第20个纪元后打印,等等。如果您将
sess.run(optimizer.lr)
更改为
K.eval(self.model.optimizer.lr)
,学习率将在回调中更新。@Yu Yang
K.eval(self.model.optimizer.lr.lr)
做到了。谢谢