fzy*_*cjy 6 python deep-learning keras
超前优化器是最近才提出的(https://arxiv.org/abs/1907.08610),并且看起来非常有前途(甚至Hinton都是其中的一位!)。
因此,我想知道如何在keras中实现它?我认为许多人可能需要此问题的答案,因为我们希望将其插入我们现有的代码中,并且可能会产生更好的结果。
我是新来的喀拉拉邦人,所以任何帮助将不胜感激。谢谢!
现有优化程序的ps源代码:https : //github.com/keras-team/keras/blob/master/keras/optimizers.py
为了演示背后的概念,可以在 Keras 回调中实现 Lookahead 优化器,请参阅此处的实现https://github.com/kpe/params-flow/blob/master/params_flow/optimizers/lookahead.py
def on_train_batch_end(self, batch, logs=None):
self.count += 1
if self.slow_weights is None:
self.slow_weights = self.model.trainable_weights
else:
if self.count % self.k == 0:
slow_ups, fast_ups = [], []
for fast, slow in zip(self.model.trainable_weights,
self.slow_weights):
slow_ups.append(K.update(slow, slow + self.alpha * (fast - slow)))
fast_ups.append(K.update(fast, slow))
K.batch_get_value(slow_ups)
K.batch_get_value(fast_ups)
Run Code Online (Sandbox Code Playgroud)
其作用在概念上非常简单——每次k更新权重都会alpha=0.5向迭代前的值移动一半 ( ) k。
注意:上述实现在 GPU 或 TPU 上可能效果不佳,因为slow_weights权重副本可能会在 CPU 上更新(并且移动权重需要时间)。
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |