我可以动态改变Keras中神经网络的学习速率吗?
我正在尝试实现一个DQN代理,这是一个深度强化学习解决方案 我应该在一些迭代之后降低学习率,而不改变模型权重或其他任何东西。在RL问题中,“拟合”是在收集了一定数量的新事件后进行的,每个“拟合”只有一个历元,因此衰减率 目前,我找到的唯一解决方案是执行以下操作:我可以动态改变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
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
)