我对强化学习还是个新手。
我在这里遇到了一个问题,我正在使用DQN。在学习和采取行动的同时,我绘制了一条累积奖励曲线。在100集之后,它显示了很多波动,这并没有告诉我它是否学到了什么。
然而,我没有使用学习和累积奖励,而是在每一集之后通过没有学习方法的整个模拟,这表明模型实际上学习得很好。这大大延长了程序的运行时间。
此外,我必须在整个过程中提取最好的模型,因为最终的模型有时似乎表现不佳。
对此有什么建议或解释吗?
发布于 2020-06-25 13:00:10
尝试使用平均回报,这通常是一个很好的衡量标准,以了解代理是否有所改善。
如果你使用的是tf_agent,你可以这样做:
...
checkpoint_dir = os.path.join('./', 'checkpoint')
train_checkpointer = common.Checkpointer(
ckpt_dir=checkpoint_dir,
max_to_keep=1,
agent=agent,
policy=agent.policy,
replay_buffer=replay_buffer,
global_step=train_step
)
policy_dir = os.path.join('./', 'policy')
tf_policy_saver = policy_saver.PolicySaver(agent.policy)
def train_agent(n_iterations):
best_AverageReturn = 0
time_step = None
policy_state = agent.collect_policy.get_initial_state(tf_env.batch_size)
iterator = iter(dataset)
for iteration in range(n_iterations):
time_step, policy_state = collect_driver.run(time_step, policy_state)
trajectories, buffer_info = next(iterator)
train_loss = agent.train(trajectories)
if iteration % 10 == 0:
print("\r{} loss:{:.5f}".format(iteration, train_loss.loss.numpy()), end="")
if iteration % 1000 == 0 and averageReturnMetric.result() > best_AverageReturn:
best_AverageReturn = averageReturnMetric.result()
train_checkpointer.save(train_step)
tf_policy_saver.save(policy_dir)在1000步之后,train函数评估平均回报,如果有任何改进,则创建检查点
https://stackoverflow.com/questions/61990680
复制相似问题