我是强化学习的新手。
我在这里使用DQN时遇到问题。我在学习和采取行动时绘制了一条累积奖励曲线。经过100集后,它显示出很多波动,但并没有告诉我它是否学到了什么。
但是,我没有使用学习和累积奖励,而是在每个情节之后通过不使用学习方法的整个模拟对模型进行了建模,这表明该模型实际上学习得很好。这大大延长了程序的运行时间。
此外,我还必须沿途提取最佳模型,因为最终模型有时表现不佳。
对此有任何建议或解释吗?
答案 0 :(得分:0)
尝试使用平均收益率,这通常是了解代理商是否正在改善的好指标。
如果您使用的是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步训练,火车功能会评估平均收益并在有任何改善的情况下创建检查点