【问题标题】:Can I change dynamically the learning rate of a Neural Network in Keras?我可以动态更改 Keras 中神经网络的学习率吗?
【发布时间】:2019-11-28 17:21:57
【问题描述】:

我正在尝试实现 DQN 代理,因此是深度强化学习解决方案。

我应该在一些迭代后降低学习率,而不改变模型权重或其他任何东西。在 RL 问题中,''fit'' 是在收集到一定数量的新事件后完成的,并且每个 ''fit'' 只有 1 个单独的 epoch,所以衰减率

目前,我找到的唯一解决方案是执行以下操作:

if(time%1000==0):
    learning_rate=learning_rate*0.75
    mainQN_temp=QNetwork(hidden_size=hidden_size, learning_rate=learning_rate)
    mainQN_temp.model.load_weights("./save/dqn-angle3-"+str(t)+".h5")
    mainQN=mainQN_temp



class QNetwork:
    def __init__(self, learning_rate=0.01, state_size=4,
                 action_size=5, hidden_size=32):

        # some layers in here

    self.optimizer = Adam(lr=learning_rate)
    self.model.compile(loss='mse', optimizer=self.optimizer)

这是效率最低的事情。我尝试引用 mainQN.optimizer.lr 之类的东西,但没有成功。

【问题讨论】:

    标签: keras deep-learning reinforcement-learning


    【解决方案1】:

    K.set_value(model.optimizer.lr, new_lr) 可以。 (Kimport keras.backend as K

    如果您想在任意数量的批次适合(即训练迭代)后减少 lr,您可以定义自定义回调:

    class ReduceLR(keras.callbacks.Callback):
        def on_batch_end(self, batch, logs=[]):
            if K.eval(self.model.optimizer.iterations) >= 50:
                K.set_value(self.model.optimizer.lr, 1e-4)
    reduce_lr = ReduceLR()
    model.fit(x, y, callbacks=[reduce_lr])
    

    【讨论】:

    • 我尝试了第一个解决方案,但我得到“AttributeError: module 'keras' has no attribute 'set_value'”,所以我认为这是不推荐使用的东西......我会看看回调,谢谢
    • @user1834153 import keras.backend as K 是您可能缺少的(或者,如果您使用的是from tensorflow.keras import ...,请执行import tensorflow.keras.backend as K
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2016-10-27
    • 2019-01-12
    • 2012-07-09
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多