我正在改编Tabor关于DQN的课程中的Pytorch代码(https://github.com/philtabor/Deep-Q-Learning-Paper-To-Code)使用vizdoomgym库,之前曾设法使一个版本在TF.中工作
训练完我的经纪人后,我会把它的表现想象成.mp4视频。以前,我使用SK视频库来录制代理的比赛,因为内部的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
我注意到预处理包装器继承了观察方法,这意味着我应该能够在预处理之前访问观察并存储它们。然而,我不熟悉内存管理问题与这样的解决方案,如果它甚至可行?另一种方法是尝试";恢复";观察结果从扭曲的表现回到了原来的形式,但这似乎不可行。
欢迎提出任何建议。
如有疑问,预处理包装器可用于在预处理函数之前成功地将帧保存到图像阵列中。
然后可以使用sk视频库将此图像阵列转换为.mp4视频。然而,由于内存溢出的风险,必须为此构建单独版本的包装器,因此该方法并不理想。