【问题标题】:AttributeError: 'DummyVecEnv' object has no attribute 'shape'AttributeError:“DummyVecEnv”对象没有属性“形状”
【发布时间】:2021-01-27 20:29:31
【问题描述】:

我正在尝试为我的强化学习算法创建一个环境,但是,在调用 PPOPolicy 时似乎有点问题。为此我开发了以下环境envFru

import gym
import os, sys
import numpy as np
import pandas as pd
from gym import spaces
import random

class envFru(gym.Env):
    metadata ={'render.modes': ['human']}
    
    def __init__(self):
        self.df = df
        
        self.action_space = spaces.Discrete(2)
        self.observation_space = spaces.Box(low=np.array([0,0,0]), high=np.array([1,1,1]), dtype=np.float16)
    
    
    def reset(self):
        pass    
    
    def step(self, action):
        pass
    
    def _next_observation(self):
        pass
    
    def _take_action(self, action):
        pass
        
    def render(self, mode = 'human', close=False):
        pass

from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines.common.policies import MlpPolicy
from stable_baselines2.ppo.ppo import PPO


envF = DummyVecEnv([lambda : envFru()])

model = PPOPolicy(envF, MlpPolicy, learning_rate= 0.001)
model.learn(total_timesteps=20000)

obs = env.reset()
for i in range(MAX_EPISODES):
    action, _states = model.predict(obs)
    obs, reward,done,info = env.step(action)
    #env.render()

我得到的回溯如下:

AttributeError                            Traceback (most recent call last)
<ipython-input-124-550b8c75c26b> in <module>
     12 envF = DummyVecEnv([lambda : envFruit()])
     13 
---> 14 model = PPOPolicy(envF, MlpPolicy, learning_rate= 0.001)
     15 model.learn(total_timesteps=20000)
     16 

~\Desktop\ImitationLearning\stable_baselines2\ppo\policies.py in __init__(self, observation_space, action_space, learning_rate, net_arch, activation_fn, adam_epsilon, ortho_init, log_std_init)
     29                  ortho_init=True, log_std_init=0.0):
     30         super(PPOPolicy, self).__init__(observation_space, action_space)
---> 31         self.obs_dim = self.observation_space.shape[0]
     32 
     33         # Default network architecture, from stable-baselines

AttributeError: 'DummyVecEnv' object has no attribute 'shape'

【问题讨论】:

标签: python reinforcement-learning openai-gym


【解决方案1】:

您确定这是您的实际代码吗?在上面的代码 sn-p 中,甚至没有定义名称 PPOPolicy。我们需要查看PPOPolicy 的代码。显然,它的构造函数(它的__init__ 方法)需要一个shape arttribute 作为它的第一个参数——所以我猜,它需要一个pandas 数据框。你的envF 没有shape 属性,所以这会导致错误。

从你的sn-p中的名字来看,我猜你应该写

model = PPOPolicy(
    envF.observation_space, 
    envF.action_space, 
    MlpPolicy, 
    learning_rate=0.001
)

在相关行。

我的假设源于错误消息

super(PPOPolicy, self).init(observation_space, action_space)

告诉我们,PPOPolicy 的构造函数将两个名为 observation_spaceaction_space 的变量传递给它的 super() 构造函数。而且由于这些名称重新出现在您的环境中,我想这就是这里的问题。但只要我们没有看到正确和完整的代码,这只是在迷雾中导航。

也许它会帮助您了解如何阅读错误消息。这可能会帮助您解决未来的问题。所以,我建议你阅读类似https://www.tutorialsteacher.com/python/error-types-in-python

【讨论】:

猜你喜欢
  • 2021-09-05
  • 2016-05-09
  • 2015-05-07
  • 2020-04-24
  • 1970-01-01
  • 2022-01-14
  • 2017-05-03
  • 2020-09-18
相关资源
最近更新 更多