了解稳定基线中的自定义政策3

问题描述

我试图从这个 doc page 中了解 stable-baselines3 中的策略网络。

  1. this 示例中所述,要指定自定义 CNN 特征提取,我们扩展 BaseFeaturesExtractor 类并在 policy_kwarg.features_extractor_class 中使用第一个参数指定它CnnPolicy

    model = PPO("CnnPolicy","BreakoutNoFrameskip-v4",policy_kwargs=policy_kwargs)
    

    Q1.我们可以对自定义 MLP 特征提取采用相同的方法吗?

  2. this 示例中所述,要指定自定义 MLP 特征提取,我们扩展 ActorCriticPolicy 类和 override _build_mlp_extractor() 和将其作为第一个参数传递:

    class CustomActorCriticPolicy(ActorCriticPolicy): ...
    model = PPO(CustomActorCriticPolicy,"CartPole-v1",verbose=1)
    

    Q2.我们可以对自定义 CNN 特征提取采用相同的方法吗?

  3. 我觉得我们可以使用 CNN 提取器或 MLP 提取器。因此,将 MlpPolicy 作为第一个参数传递给模型,然后在 policy_kwarg.features_extractor_class 中指定 CNN 特征提取器是没有意义的,如 this 示例。这导致以下政策(包含 features_extractormlp_extractor),我认为这是不正确的:

    ActorCriticPolicy(
      (features_extractor): Net(
        (conv1): Conv2d(1,32,kernel_size=(3,3),stride=(1,1))
        (conv2): Conv2d(32,64,1))
        (fc3): Linear(in_features=384,out_features=512,bias=True)
      )
      (mlp_extractor): MlpExtractor(
        (shared_net): Sequential(
          (0): Linear(in_features=512,out_features=64,bias=True)
          (1): ReLU()
        )
        (policy_net): Sequential(
          (0): Linear(in_features=64,out_features=32,bias=True)
          (1): ReLU()
          (2): Linear(in_features=32,out_features=16,bias=True)
          (3): ReLU()
        )
        (value_net): Sequential(
          (0): Linear(in_features=64,bias=True)
          (3): ReLU()
        )
      )
      (action_net): Linear(in_features=16,out_features=7,bias=True)
      (value_net): Linear(in_features=16,out_features=1,bias=True)
    )  
    

    Q3.我的这种理解是否正确?如果是,那么是否忽略了 MLP 或 CNN 特征提取器之一?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)