使用 RL Zoo 在稳定基线 3 中对自定义 Gym Env 进行超参数调整

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

我已经创建了一个 Gym 环境,并且能够通过 PPO 从稳定基线 3 对其进行训练。但是,我没有得到想要的结果。该代理似乎陷入了局部最优而不是全局最优。然而,即使达到这个阶段也需要大量的计算,而且我不确定我是否有正确的参数设置。我想对此自定义环境执行超参数调整,并且我正在遵循此示例 - https://rl-baselines3-zoo.readthedocs.io/en/master/guide/tuning.html#hyperparameters-search-space

我无法遵循该文档。

  1. 它说他们使用Optuna进行优化。然而,没有任何地方提到必须首先安装它。我们需要这样做吗?

  2. 我使用相同的结构运行我的代码

    python train.py --algo ppo --env MountainCar-v0 -n 50000 -optimize --n-trials 1000 --n-jobs 2 --sampler tpe --pruner median
    

我的环境

python mobile_robot_scripts/train_youbot_camera.py --algo ppo --env youbotCamGymEnv -n 10000 --n-trials 1000 --n-jobs 2 --sampler tpe --pruner median
   

现在,我认为有几件事是错误的。与默认的 MountainCar-v0 示例不同,我没有在gym中注册我的环境,因为没有任何地方提到需要注册,或者除了gym.make()方便之外还有任何优势。我没有安装 Optuna。在运行代码时它仍然运行,但我认为它不会进行任何超参数调整,而只是继续正常训练。

我想知道我应该如何进一步进行实际执行超参数调整。正如您所看到的,我几乎使用默认值。这是我的代码供参考:-

#add parent dir to find package. Only needed for source code build, pip install doesn't need it.
import os, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(os.path.dirname(currentdir))
os.sys.path.insert(0, parentdir)

from youbotCamGymEnv import youbotCamGymEnv
import datetime
from stable_baselines3 import ppo
from stable_baselines3.common.env_checker import check_env 

def main():  

  env = youbotCamGymEnv(renders=False, isDiscrete=False)
# It will check your custom environment and output additional warnings if needed
  check_env(env)

  model = ppo.PPO("CnnPolicy", env, verbose=1)
  model.learn(total_timesteps = 50000)
  print("############Training completed################")
  model.save(os.path.join(currentdir,"youbot_camera_trajectory"))
  
  # del model

  # env = youbotCamGymEnv(renders=True, isDiscrete=False)
  model = ppo.PPO.load(os.path.join(currentdir,"youbot_camera_trajectory"))
  # obs = env.reset()

  # for i in range(1000):
  #     action, _states = model.predict(obs, deterministic=True)
  #     obs, reward, done, info = env.step(action)
  #     # print("reward is ", reward)
  #     env.render(mode='human')
  #     if done:
  #       obs = env.reset()

  # env.close()

if __name__ == '__main__':
  main()

python reinforcement-learning openai-gym hyperparameters stable-baselines
1个回答
0
投票

我认为你使用 RL Zoo 的方式是错误的。您不应该运行自己的

train.py
(train_youbot_camera.py)。您没有在脚本中传递任何参数,因此
--algo ppo --env youbotCamGymEnv -n 10000 --n-trials 1000 --n-jobs 2 --sampler tpe --pruner median
这些参数实际上都没有传递到您的程序中。

根据文档,仅当您位于 RL Zoo 文件夹内时才运行

python train.py
。否则,您应该运行
python -m rl_zoo3.train
。另外,我认为你不需要编写自己的训练脚本,因为rl_zoo3的目标是为你准备一切。

回到你的问题,我认为Optuna是在安装rl_zoo3时安装的。

您应该注册您的环境,文档中提到了这一点。检查这个https://rl-baselines3-zoo.readthedocs.io/en/master/guide/custom_env.html

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