DQN: Доступ к необработанным наблюдениям после преобразования пространства наблюдения в среду Box?
Я адаптирую код Pytorch из курса Табора по DQN (https://github.com/philtabor/Deep-Q-Learning-Paper-To-Code) для работы с библиотекой vizdoomgym, предварительно сумев заставить версию работать в ТФ.
После обучения моего агента я визуализирую его работу как видео в формате.mp4. Раньше я использовал библиотеку SK-video для записи агента в процессе, поскольку собственный класс Monitor не работал с библиотекой VZDgym. Это было достигнуто простым сохранением каждого наблюдения в массив изображений.
Я столкнулся с проблемой, так как код, за которым я следую, вызывает оболочки для преобразования пространства наблюдения в среду Box, в результате изображения фактически искажаются. Эти оболочки можно найти в файле utils.py с основным методом, показанным ниже:
def make_env(env_name, shape=(84,84,1), repeat=4, clip_rewards=False,
no_ops=0, fire_first=False):
env = gym.make(env_name)
env = RepeatActionAndMaxFrame(env, repeat, clip_rewards, no_ops, fire_first)
env = PreprocessFrame(shape, env)
env = StackFrames(env, repeat)
return env
Я заметил, что обертки предварительной обработки наследуют метод наблюдения, а это означает, что я должен иметь доступ к наблюдениям и сохранять их до предварительной обработки. Однако я не знаком с проблемами управления памятью с таким решением, если это вообще возможно? Альтернативный подход состоял бы в том, чтобы попытаться "восстановить" наблюдения из их искаженных представлений обратно в их первоначальную форму, но это не представляется возможным.
Любой совет приветствуется.
1 ответ
Как и предполагалось, оболочка предварительной обработки может быть использована для успешного сохранения кадров до функций предварительной обработки в массиве изображений.
Затем этот массив изображений можно преобразовать в видео в формате.mp4 с помощью библиотеки sk-video. Однако для этого пришлось создать отдельную версию оболочки из-за риска переполнения памяти, поэтому метод не идеален.