多项式衰减

[source]

PolynomialDecay class

keras.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.serializekeras.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类型相同的标量张量.