AttributeError: 'DummyVecEnv' object has no attribute 'shape'
AttributeError: 'DummyVecEnv' object has no attribute 'shape'
我正在尝试为我的强化学习算法创建一个环境,但是,在调用 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'
您确定这是您的实际代码吗?在上面的代码片段中,名称 PPOPolicy
甚至都没有定义。我们需要查看 PPOPolicy
的代码。显然,它的构造函数(它的 __init__
方法)需要一些东西作为它的第一个参数,它有一个 shape
arttribute - 所以我猜,它需要一个 pandas
数据帧。您的 envF
没有 shape
属性,因此这会导致错误。
从你片段中的名字来看,我想你应该写
model = PPOPolicy(
envF.observation_space,
envF.action_space,
MlpPolicy,
learning_rate=0.001
)
在相关行。
我的假设源于错误信息
super(PPOPolicy, self).init(observation_space, action_space)
告诉我们,PPOPolicy
的构造函数将名为 observation_space
和 action_space
的两个变量传递给它的 super()
构造函数。由于这些名称再次出现在您的环境中,我想这就是问题所在。但只要我们看不到正确完整的代码,这就是在迷雾中导航。
也许它可以帮助您了解如何阅读错误消息。这可能会帮助您解决未来的问题。所以,我建议你阅读类似 https://www.tutorialsteacher.com/python/error-types-in-python
的内容
我正在尝试为我的强化学习算法创建一个环境,但是,在调用 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'
您确定这是您的实际代码吗?在上面的代码片段中,名称 PPOPolicy
甚至都没有定义。我们需要查看 PPOPolicy
的代码。显然,它的构造函数(它的 __init__
方法)需要一些东西作为它的第一个参数,它有一个 shape
arttribute - 所以我猜,它需要一个 pandas
数据帧。您的 envF
没有 shape
属性,因此这会导致错误。
从你片段中的名字来看,我想你应该写
model = PPOPolicy(
envF.observation_space,
envF.action_space,
MlpPolicy,
learning_rate=0.001
)
在相关行。
我的假设源于错误信息
super(PPOPolicy, self).init(observation_space, action_space)
告诉我们,PPOPolicy
的构造函数将名为 observation_space
和 action_space
的两个变量传递给它的 super()
构造函数。由于这些名称再次出现在您的环境中,我想这就是问题所在。但只要我们看不到正确完整的代码,这就是在迷雾中导航。
也许它可以帮助您了解如何阅读错误消息。这可能会帮助您解决未来的问题。所以,我建议你阅读类似 https://www.tutorialsteacher.com/python/error-types-in-python
的内容