如何指定 model.learn() 在稳定基线 3 的特定片段内结束?

问题描述 投票:0回答:2

我知道指定

total_timesteps=
是一个必需参数,但是如何在特定剧集内结束
model.learn()
?请原谅我对
stables_baselines3
还很陌生,并且
pytorch
仍然不知道如何在代码中实现它。

import gym
import numpy as np
from stable_baselines3 import DDPG
from stable_baselines3.common.noise import NormalActionNoise

env = gym.make('NeuralTraffic-v1')

n_actions = env.action_space.shape[-1]
action_noise = NormalActionNoise(mean=np.zeros(n_actions), sigma=0.1 * np.ones(n_actions))
model = DDPG("MlpPolicy", env, action_noise=action_noise, verbose=1)
model.learn(total_timesteps=60, log_interval=1)
model.save("ddpg")
env = model.get_env()

我想在 60 结束这一集,但我的推出是:

----------------------------------
| rollout/           |           |
|    ep_len_mean     | 94        |
|    ep_rew_mean     | -2.36e+04 |
| time/              |           |
|    episodes        | 1         |
|    fps             | 0         |
|    time_elapsed    | 452       |
|    total_timesteps | 94        |
----------------------------------

我不明白为什么只有一集?我想了解如何实施将学习限制在指定的剧集中。

pytorch python-3.7 stable-baselines
2个回答
1
投票

通用 Box-2D 和经典控制环境在一个情节内有 1000 个时间步,但这并不是恒定的,因为代理可以在开始时做一些奇怪的事情,并且环境可以自行重置(导致每个情节的时间步不均匀)。因此,在进行基准测试时,通常要记住一个特定的时间步长(无模型强化学习的大多数研究论文中的时间步长为 1e6),而不是指定一定数量的剧集。正如您在 SB3 Docs DDPG.learn method 中看到的那样,它们没有提供特定的参数来设置剧集数量,实际上最好记住特定的时间步数。我看到您写了

60
来代替
total_timesteps
。训练 RL 智能体的量太少了。尝试保留类似
1e5
1e6
的内容,您可能会看到好的结果。祝你好运!


0
投票

聚会有点晚了,但希望它能帮助其他访问此页面的人。

根据您的

ep_len_mean
变量,环境的每一集在终止之前都包含 94 个步骤。

total_timesteps
设置为 60 意味着学习算法在停止训练过程之前只会运行
env.step()
60 次,不到 1 个完整的episode94步)。

要实现您想要的 60 剧集(而不是步数),您只需采取 94(每集步数)x 60(所需剧集)= 5640(所需总步数),这将是您的

total_timesteps
参数。

© www.soinside.com 2019 - 2024. All rights reserved.