1 测试前的准备
在进行eval函数前,需要先训练好模型,也可以选择同时运行run、eval函数(下面附有如何同时运行的代码),但是基本没必要。
在预训练的过程中,神经网络模型默认保存在 /results/MyEnv/MyEnv/mappo/check/run/models目录下,训练完成后找到最后一次更新后保存的文件,models下面会有 accor.pt 和 critic.pt文件即代表下面可以进行eval函数。
同时,写好自己的eval_envs文件self.eval_envs = config['eval_envs']
2 如何测试
2.1 同时运行run和eval
MAPPO的light版本代码默认是不进行eval操作的,源头在run函数中有体现:
# eval
if episode % self.eval_interval == 0 and self.use_eval:
self.eval(total_num_steps)
在config的文件中,默认--use_eval
为False,所以在运行run函数时不会进行eval操作,这里只需要把这个参数改为True即可同时运行self.eval
函数。
parser.add_argument("--use_eval", action='store_true', default=True, help="by default, do not start evaluation. If set`, start evaluation alongside with training.")
2.2 只运行eval
在训练完成后,我们可以只运self.eval
函数,以检验训练策略的好坏。
- 把train里面的
runner.run()
改为runner.eval(total_num_steps)
,这个total_num_steps自己可以根据情况设定。 - 在config中把
"--model_dir"
赋值为你训练好的模型就行。
parser.add_argument("--model_dir", type=str, default='../results/MyEnv/MyEnv/mappo/check/run1/models', help="by default None. set the path to pretrained model.")
赋值完后在base_runner文件中会自动加载训练好的网络:
if self.model_dir is not None:
self.restore()
def restore(self):
"""Restore policy's networks from a saved model."""
policy_actor_state_dict = torch.load(str(self.model_dir) + '/actor.pt')
self.policy.actor.load_state_dict(policy_actor_state_dict)
if not self.all_args.use_render:
policy_critic_state_dict = torch.load(str(self.model_dir) + '/critic.pt')
self.policy.critic.load_state_dict(policy_critic_state_dict)