python - 在对 epsilon 使用线性退火的 epsilon 贪心策略时测量情节奖励
问题描述
Keras 中是否有标准做法或工具可以估计在训练期间与 epsilon 去相关的情节奖励?
在训练下面的 dqn 网络时,我可以在训练期间随着时间的推移测量情节奖励,但是由于问题的性质,随着 epsilon 的减少,无论模型是否从训练中得到改进,情节奖励都会增加。因此,很难判断模型是否正在改进/收敛,或者增加的情节奖励是否仅仅是由于 epsilon 的线性退火。
如果我必须手动解决这个问题,我将训练所需训练步骤的一小部分,然后使用 epsilon = 0 测试模型,记录该时刻的平均剧集奖励,手动更改 epsilon,然后再次执行相同的循环. 不过,这似乎是一个 hack,我认为其他任何使用 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'])
典型的训练图可能如下所示: 典型的训练指标
解决方案
推荐阅读
- angularjs - main.js(compiled js-files) 来自 Angular 工件的文件替换另一个构建工件
- javascript - 如何在多选下拉菜单中禁用 2 个选项并将该选项变灰
- google-apps-script - 如何为多张纸设置一个 onOpen 函数?
- python - 如何正确实现recv和一次发送
- javascript - 服务器端重定向,无需调用 GET 两次
- php - 如何使用代理服务器通过 websocket 解析数据?
- ios - iOS 测试推送通知的最佳实践(UI 测试)
- flutter - 如何在 Flutter 中选择时更改 ListTile 的背景颜色
- python-3.x - joshDoe 为 Gstreamer 设计的 Pylon gst-plugin-vision
- laravel - 在laravel eloquent中使用belongsToMany时,集合中不存在属性