繁体   English   中英

Keras自定义优化器批量更改参数

[英]Keras custom optimizer change parameters in batches

我想定制我自己的优化器,该优化器将在每一个keras批次结束时更改学习率。 首先,我构建一个自定义回调:

class custom_callback(Callback):
  def __init__(self,lr):
    super(op_callback, self).__init__()
    self.lr=lr

  def on_batch_end(self,batch,logs={}):
    sgd = SGD(lr=batch*self.lr)
    self.model.compile(optimizer=sgd,loss='categorical_crossentropy',metrics=['accuracy'])

然后,我从doc复制SGD优化器代码。 因为我想确保学习率已更改,所以我在get_update函数中打印了学习率。

def get_updates(self, loss, params):
    print(self.lr)
    ...

但是它只打印一次学习率。 我发现get_update函数将仅在构建计算图的开始时被调用。 但是我仍然不明白为什么即使我重新初始化SGD实例也不能打印任何内容。 如何在优化程序的批处理结束时更改参数? 提前致谢。

查看LearningRateScheduler的源代码,似乎是实现所需目标的一种最小方法(它没有检查get_update的调用频率,我什至不确定是否应在每个批处理上执行,无论如何回调肯定会调整学习率):

from keras import backend as K
from keras.callbacks import Callback

class BatchLearningRateScheduler(Callback):
    def __init__(self, lr):
        super().__init__()
        self.lr = lr

    def on_batch_end(self, batch, logs=None):
        lr = batch * self.lr
        K.set_value(self.model.optimizer.lr, lr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM