Python 在epsilon上使用线性退火的epsilon贪婪策略测量情节报酬

Python 在epsilon上使用线性退火的epsilon贪婪策略测量情节报酬,python,tensorflow,keras,keras-rl,Python,Tensorflow,Keras,Keras Rl,在Keras中是否有一个标准实践或工具可以对训练期间与epsilon不相关的情节奖励进行评估 在训练以下dqn网络时,我可以在训练期间测量一段时间内的事件奖励,但是由于问题的性质,随着epsilon的减少,无论模型是否从训练中得到改进,事件奖励都会增加。因此,很难判断模型是否在改进/收敛,或者增加的事件回报是否仅仅是由于ε的线性退火 如果我必须手动解决这个问题,我会训练总期望训练步骤的一小部分,然后用epsilon=0测试模型,记录当时的平均情节奖励,手动更改epsilon,然后再次执行相同的循

在Keras中是否有一个标准实践或工具可以对训练期间与epsilon不相关的情节奖励进行评估

在训练以下dqn网络时,我可以在训练期间测量一段时间内的事件奖励,但是由于问题的性质,随着epsilon的减少,无论模型是否从训练中得到改进,事件奖励都会增加。因此,很难判断模型是否在改进/收敛,或者增加的事件回报是否仅仅是由于ε的线性退火

如果我必须手动解决这个问题,我会训练总期望训练步骤的一小部分,然后用epsilon=0测试模型,记录当时的平均情节奖励,手动更改epsilon,然后再次执行相同的循环。这看起来像是一个黑客,但我认为任何其他使用epsilon线性退火的人都会遇到同样的问题

想法

我的模型构造如下:

model = Sequential()
model.add(Flatten(input_shape=(WINDOW_LENGTH,) + (observation_space_count,)))
for i in range(hidden_layer_count):
    model.add(Dense(observation_space_count*layer_width))
    model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

memory = SequentialMemory(limit=memory_length, window_length=WINDOW_LENGTH)
policy = LinearAnnealedPolicy(EpsGreedyQPolicy(), attr='eps', value_max=0.75, value_min=.01, value_test=.0, nb_steps=TOTAL_STEPS)

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=memory_length, target_model_update=1e-2, policy=policy, gamma=.99)
dqn.compile(Adam(lr=LEARNING_RATE), metrics=['mae'])
典型的培训图可能如下所示: