PolynomialDecay classkeras.optimizers.schedules.PolynomialDecay(
initial_learning_rate,
decay_steps,
end_learning_rate=0.0001,
power=1.0,
cycle=False,
name="PolynomialDecay",
)
一个使用多项式衰减计划的LearningRateSchedule.
通常观察到,一个单调递减的学习率,其变化程度经过精心选择,会得到一个性能更好的模型.该计划应用一个多项式衰减函数到一个优化器步骤,给定一个提供的initial_learning_rate,在给定的decay_steps内达到一个end_learning_rate.
它需要一个step值来计算衰减的学习率.你可以传递一个在后端变量,在每次训练步骤中递增.
该计划是一个1-arg可调用对象,当传递当前优化器步骤时,会产生一个衰减的学习率.这对于在不同的优化器函数调用中改变学习率值非常有用.它的计算方式如下:
def decayed_learning_rate(step):
step = min(step, decay_steps)
return ((initial_learning_rate - end_learning_rate) *
(1 - step / decay_steps) ^ (power)
) + end_learning_rate
如果cycle为True,则使用decay_steps的倍数,第一个大于step的倍数.
def decayed_learning_rate(step):
decay_steps = decay_steps * ceil(step / decay_steps)
return ((initial_learning_rate - end_learning_rate) *
(1 - step / decay_steps) ^ (power)
) + end_learning_rate
你可以直接将此计划传递给keras.optimizers.Optimizer作为学习率.
示例:使用sqrt(即power=0.5)在10000步中从0.1衰减到0.01来拟合模型:
...
starter_learning_rate = 0.1
end_learning_rate = 0.01
decay_steps = 10000
learning_rate_fn = keras.optimizers.schedules.PolynomialDecay(
starter_learning_rate,
decay_steps,
end_learning_rate,
power=0.5)
model.compile(optimizer=keras.optimizers.SGD(
learning_rate=learning_rate_fn),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(data, labels, epochs=5)
学习率计划也可以使用keras.optimizers.schedules.serialize和keras.optimizers.schedules.deserialize进行序列化和反序列化.
参数:
initial_learning_rate: 一个Python浮点数.初始学习率.
decay_steps: 一个Python整数.必须是正数.见上面的衰减计算.
end_learning_rate: 一个Python浮点数.最小结束学习率.
power: 一个Python浮点数.多项式的幂.默认为1.0.
cycle: 一个布尔值,是否应在decay_steps之外循环.
name: 字符串.操作的可选名称.默认为"PolynomialDecay".
返回:
一个1-arg可调用学习率计划,接受当前优化器步骤并输出衰减的学习率,一个与initial_learning_rate类型相同的标量张量.