#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)