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

2024-04-25 19:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定制我自己的优化器,它将在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函数中打印学习率。在

^{pr2}$

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


Tags: 函数selfgetinitdefcustombatchcallback
1条回答
网友
1楼 · 发布于 2024-04-25 19:41:55

查看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)

相关问题 更多 >