我可以动态改变Keras中神经网络的学习速率吗?

我可以动态改变Keras中神经网络的学习速率吗?,keras,deep-learning,reinforcement-learning,Keras,Deep Learning,Reinforcement Learning,我正在尝试实现一个DQN代理,这是一个深度强化学习解决方案 我应该在一些迭代之后降低学习率,而不改变模型权重或其他任何东西。在RL问题中,“拟合”是在收集了一定数量的新事件后进行的,每个“拟合”只有一个历元,因此衰减率 目前,我找到的唯一解决方案是执行以下操作: if(time%1000==0): learning_rate=learning_rate*0.75 mainQN_temp=QNetwork(hidden_size=hidden_size, learning_rate

我正在尝试实现一个DQN代理,这是一个深度强化学习解决方案

我应该在一些迭代之后降低学习率,而不改变模型权重或其他任何东西。在RL问题中,“拟合”是在收集了一定数量的新事件后进行的,每个“拟合”只有一个历元,因此衰减率

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

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之类的东西,但运气不佳。

K.set\u值(model.optimizer.lr,new\u lr)
就可以了。(
K
中的导入keras.backend作为K)

相反,如果您希望在经过任意数量的批处理(即训练迭代)后减少
lr
,则可以定义自定义回调:

class ReduceLR(keras.callbacks.Callback):
批处理端上的def(自身、批处理、日志=[]):
如果K.eval(self.model.optimizer.iterations)>=50:
K.设定值(self.model.optimizer.lr,1e-4)
reduce_lr=ReduceLR()
fit(x,y,回调=[reduce\u lr])

我尝试了第一种解决方案,但我得到了“AttributeError:module'keras'没有属性'set_value'”,因此我认为这是一种不推荐使用的方法……我将查看回调函数,thanks@user1834153
导入keras.backend as K
是您可能缺少的(或者,如果您正在使用tensorflow.keras导入的
,请执行
将tensorflow.keras.backend导入为K