reinforcement-learning - DQN:在将观察空间转换为 Box 环境后访问原始观察结果?
问题描述
我正在改编 Tabor 的 DQN 课程( https://github.com/philtabor/Deep-Q-Learning-Paper-To-Code )中的 Pytorch 代码,以使用 vizdoomgym 库,之前已经设法使版本工作在 TF 中。
训练我的代理后,我会将其性能可视化为 .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
我注意到预处理包装器继承了观察方法,这意味着我应该能够在预处理之前访问观察并存储它们。但是,我不熟悉这种解决方案的内存管理问题,是否可行?另一种方法是尝试将观察结果从扭曲的表示中“恢复”回原始形式,但这似乎不可行。
任何建议表示赞赏。
解决方案
正如所怀疑的,预处理包装器可用于在预处理函数之前成功地将帧保存到图像数组中。
然后可以使用 sk-video 库将此图像阵列转换为 .mp4 视频。但是,由于存在内存溢出的风险,因此必须为此构建一个单独的包装器版本,因此该方法并不理想。
推荐阅读
- perl - Perl如何将文件夹中带有空格的文件路径传递给反引号
- c# - 为什么 Input.GetMouseButtonDown 不能让我拍摄?
- python - 在Python中绘制选定网格区域外边缘的方法
- vb.net - winforms项目中的拼写检查richtextbox
- kubernetes - 无法使用 google terraform GKE 模块在 GKE 集群上创建 Windows 节点池
- c# - 在 c# 中使用依赖注入的 RabbitMQ 工作队列
- sql - 当条件存在时查询一组数据与另一组数据
- php - PDO 语句更新 0 值而不是 null 或空
- oracle - 如何向新创建的 LISTENER 注册可插拔数据库(PDB)
- python - 通过列中的相互元素计算行时间差和连接