我正在尝试实施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之类的东西时没有运气。
答案 0 :(得分:2)
K.set_value(model.optimizer.lr, new_lr)
可以。 (K
与import 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])