Изменение размера состояния среды тренажерного зала, состоящей из 4 кадров (среда atari)

#python #wrapper #environment #openai-gym #atari-2600

Вопрос:

Я разрабатываю Автономный агент на основе DQN. Я использую библиотеку тренажерного зала для создания сред, которые я хочу протестировать, но я застрял в обработке кадров состояния. Состояние, возвращаемое средой gym с помощью оболочки FrameStack, имеет следующее пространство наблюдения:

 env = gym.make('Bowling-v0')
env = gym.wrappers.FrameStack(env, 4)
print(env.observation_space)

Box(0, 255, (4, 210, 160, 3), uint8)
 

Я хочу, чтобы было место для наблюдения Box(0, 255, (4, 88, 80, 1), uint8) . Как я могу это сделать? Я пытался использовать другую обертку, подобную этой:

 env = gym.wrappers.ResizeObservation(env, (4, 88, 80, 1))
print(env.observation_space)
 

Но пространство для наблюдения в результате есть Box(0, 255, (4, 88, 80, 1, 160, 3), uint8) . Что я делаю не так?

Комментарии:

1. Форма наблюдательного пространства отражает изображение, которое вы получаете из окружающей среды. Если вы хотите изменить его размер, вам необходимо иметь одинаковый размер входных данных в целевом измерении. Другими словами, 210*160*3 != 88*80*1 . Вы просите преобразовать изображение 210x160x3 в изображение 88x80x1. Для этого вам нужна какая-то пользовательская функция преобразования. Или попробуйте изменить входной слой вашего DQN на 210x160x3.

Ответ №1:

Исправлено! Я просто делал это неправильно.

 env = gym.make('Bowling-v0')
print(env.observation_space)

Box(0, 255, (210, 160, 3), uint8)
 

Сначала необходимо применить изменение размера, а затем укладку только после изменения размера!

 env = gym.wrappers.ResizeObservation(env, (88, 80))
print(env.observation_space)

Box(0, 255, (88, 80, 3), uint8)
 

Итак, теперь мы можем приступить к укладке с помощью оболочки FrameStack

 env = gym.wrappers.FrameStack(env, 4)
print(env.observation_space)

Box(0, 255, (4, 88, 80, 3), uint8)