我正在尝试制作一个用于玩OpenAI Gym CarRacing环境的AI代理,但我在加载保存的模型时遇到了问题。我训练它们,它们工作,我保存它们并装载它们,突然汽车甚至都不动了。我甚至试着从其他人那里下载模型,当加载时,车就不动了。
我在Jupyter笔记本的VS代码中使用Ubuntu 20.04gym==0.21.0,稳定基线3==1.6.0,python==3.7.0
import gym
from stable_baselines3 import PPO
from stable_baselines3.common.evaluation import evaluate_policy
import os
我使环境
environment_name = "CarRacing-v0"
env = gym.make(environment_name)
我创建了PPO模型,并让它学习几千个时间步长。现在,当我评估策略时,汽车渲染为正在移动。
log_path = os.path.join('Training', 'Logs')
model = PPO("CnnPolicy", env, verbose=1, tensorboard_log=log_path)
model.learn(total_timesteps=4000)
evaluate_policy(model, env, n_eval_episodes=1, render=True)
我保存型号
ppo_path = os.path.join('Training', 'Saved Models', 'PPO_Car_Testing')
model.save(ppo_path)
现在我删除模型并加载保存的模型,当我评估它时,汽车不会移动,就好像它总是什么都不做一样。我尝试了2k个时间步长的模型学习,直到一个已经学习了200万个时间步长。
del model
model = PPO("CnnPolicy", env, verbose=1, tensorboard_log=log_path)
ppo_path_load = os.path.join('Training', 'Saved Models', 'PPO_2m_Driving_model')
model.load(ppo_path_load, env)
evaluate_policy(model, env, n_eval_episodes=1, render=True)
你知道为什么模型加载不正确吗?
您的模型似乎没有正确加载
你给了错误的代码
model = PPO("CnnPolicy", env, verbose=1, tensorboard_log=log_path)
ppo_path_load = os.path.join('Training', 'Saved Models', 'PPO_2m_Driving_model')
model.load(ppo_path_load, env)
将其更改为
model = PPO("CnnPolicy", env, verbose=1, tensorboard_log=log_path)
ppo_path_load = os.path.join('Training', 'Saved Models', 'PPO_2m_Driving_model')
model = ppo.load(ppo_path_load, env)
将RLALGORITHM
更改为您的Rl算法,如PPO或A2C等
model = RLALGORITHM.load(ppo_path_load, env)
这个问题可以用PPO.load((而不是model.load((来解决。不知道为什么。
这是加载型号的正确代码
del model
ppo_path_load = os.path.join('Training', 'Saved Models', 'PPO_2m_Driving_model')
model = PPO.load(ppo_path_load)
如果您查看load
方法的文档字符串,您将看到:
从zip文件加载模型。警告:
load
从头开始重新创建模型,它不会更新到位!对于就地加载,请改用set_parameters
。
因此,您的问题的解决方案可能是:
model = model.load(ppo_path_load, env)
这种行为也使我感到困惑。也许我们可以向开发人员汇报。