Skip to content

Latest commit

 

History

History
68 lines (51 loc) · 2.71 KB

README.zh-CN.md

File metadata and controls

68 lines (51 loc) · 2.71 KB

Keras学习率分层倍率控制

Travis Coverage Version 996.ICU Downloads

[中文|English]

在Keras中控制每一层的学习率,通过层名的最长匹配前缀来确定学习率倍率,适用于按Keras规则写的优化器。

安装

pip install keras-lr-multiplier

使用

外部

Keras中不同layer设置不同学习率的实现

基本

LRMultiplier中第一个参数是原有的优化器,形式和compile相同,可以是标志字符串(如'Adam'),也可以是一个初始化后的优化器(如Adam(lr=1e-2))。第二个参数是一个dict,是名称前缀到学习率倍率的映射,每一层在没有匹配到任何前缀的情况下默认倍率取1.0,否则只采用最长匹配前缀的结果,如存在"Dense""Dense-1"时,"Dense-12"采用"Dense-1"对应的倍率。一个例子如下:

from keras.models import Sequential
from keras.layers import Dense
from keras_lr_multiplier import LRMultiplier

model = Sequential()
model.add(Dense(
    units=5,
    input_shape=(5,),
    activation='tanh',
    name='Dense',
))
model.add(Dense(
    units=2,
    activation='softmax',
    name='Output',
))
model.compile(
    optimizer=LRMultiplier('adam', {'Dense': 0.5, 'Output': 1.5}),
    loss='sparse_categorical_crossentropy',
)

变化倍率

倍率也可以是一个可以被调用的对象,如匿名函数或实现了__call__object。输入的参数是从0开始的训练步数,需要返回对应的学习率倍率:

from keras import backend as K
from keras_lr_multiplier import LRMultiplier

LRMultiplier('adam', {'Dense': lambda t: 2.0 - K.minimum(1.9, t * 1e-4)})