“让Keras更酷一些!”:分层的学习率和自由的梯度( 五 )

下面是一个封装好的实现:

使用示例:

几个注意事项:

1. 目前这种方式 , 只能用于自己动手写代码来构建模型的时候插入 , 无法对建立好的模型进行操作;

2. 如果有预训练权重 , 有两种加载方法 。 第一种是像刚才的使用示例一样 , 在定义层的时候通过 weights \n参数传入;第二种方法是建立好模型后(已经在相应的地方插入好 SetLearningRate) , 用 model.set_weights \n(weights) 来赋值 , 其中 weights 是“在 SetLearningRate 的位置已经被除以了 λ 或的原来模型的预训练权重”;

\n\t

3. 加载预训练权重的第二种方法看起来有点不知所云 , 但如果你已经理解了这一节的原理 , 那么应该能知道我在说什么 。 因为设置学习率是通过 weight * lamb 来实现的 , 所以 weight 的初始化要变为 weight / lamb;

4. 这个操作基本上不可逆 , 比如你一开始设置了 Embedding 层以总体的 1/10 比例的学习率来更新 , 那么很难在这个基础上 , 再将它改为\n 1/5 \n或者其他比例 。 (当然 , 如果你真的彻底搞懂了这一节的原理 , 并且也弄懂了加载预训练权重的第二种方法 , 那么还是有办法的 , 那时候相信你也能搞出来);

推荐阅读