机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载导读AtariPreprocessing是 Dopamine 强化学习框架中为 Atari 2600 智能体提供标准图像预处理的封装类位于 dopamine/discrete_domains/atari_lib.py。它实现了 DQN 系列论文中公认的四大预处理约定帧跳过Frame Skipping、生命损失终止信号Terminal on Life Loss、灰度化与双帧最大池化Grayscale Max Pooling、以及缩放到 84×84 方形画面。阅读完本文你将理解该类的完整实现原理、每个构造参数的作用与取值范围、它与create_atari_environment的装配关系以及如何通过 gin 配置文件对其进行参数化从而在自己的强化学习实验中复现 Nature DQN 的标准评估协议。一、背景为什么需要统一的 Atari 预处理原始的 Atari 2600 游戏画面以 210×160 的 RGB 帧输出帧率高达 60 FPS且相邻帧高度冗余。直接将原始画面送入神经网络既浪费算力也不利于稳定训练。为此强化学习社区逐步沉淀出一套标准预处理流程其核心依据来自三篇论文JAIR 论文Bellemare et al., 2013首次系统化提出 Arcade Learning EnvironmentALE作为评估平台并描述了画面预处理的基本思路。Nature DQN 论文Mnih et al., 2015确立了帧跳过、灰度化、下采样、历史帧堆叠等具体做法将观测标准化为 84×84×4 的张量输入。Machado et al. (2018)《Revisiting the Arcade Learning Environment: Evaluation Protocols and Open Problems for General Agents》重审了 ALE 的评估协议进一步明确了预处理细则如 sticky actions 的使用。AtariPreprocessing类正是对上述论文约定的工程化落地。类的文档字符串atari_lib.py明确列出了它提供的四个子集功能帧跳过默认跳 4 帧生命损失时发出终止信号默认关闭对最近两帧做灰度化与最大池化将画面下采样为方形图像默认为 84×84。二、类的定位与整体职责从源码结构看AtariPreprocessing被定义为一个gin.configurable装饰的类atari_lib.py这意味着它可以直接被 gin 配置文件按名称参数化。它本身是一个 Gym 风格的包装器wrapper内部持有一个真实的 ALE/Gym 环境对外暴露标准的reset/step/render/close接口以及observation_space、action_space、reward_range、metadata等 Gym 兼容属性。模块头部的注释atari_lib.py将它的职责概括为三件事可选地在丢失一条生命时发出终止信号帧跳过与颜色池化灰度 最大池化在观测送入智能体之前对图像进行缩放。同时模块中还定义了NATURE_DQN_OBSERVATION_SHAPE (84, 84)和NATURE_DQN_STACK_SIZE 4两个常量atari_lib.py前者与AtariPreprocessing的默认screen_size84一致后者对应智能体侧堆叠 4 帧历史观测的约定——预处理类负责单帧画面历史堆叠则由上层智能体完成。三、构造函数与参数详解AtariPreprocessing的构造函数签名如下atari_lib.pygin.configurable class AtariPreprocessing(object): def __init__( self, environment, frame_skip4, terminal_on_life_lossFalse, screen_size84, use_legacy_gymFalse, ):各参数的含义与约束如下参数类型默认值说明environmentGym 环境必填被预处理的 Gym 环境ALE 的包装。frame_skipint4智能体体验游戏的频率即每执行一次动作底层环境内部重复执行该动作的帧数。Nature DQN 的标准值即为 4。terminal_on_life_lossboolFalse若为 True则每当丢失一条生命时step()返回is_terminalTrue详见 Mnih et al. 2015。默认关闭。screen_sizeint84缩放后 Atari 帧的边长输出为方形。use_legacy_gymboolFalse是否使用旧版 Gym API返回 4 元组而非新版 Gymnasium API返回 5 元组。构造函数中有两处输入校验当frame_skip 0或screen_size 0时分别抛出ValueError提示 Frame skip should be strictly positive 与 Target screen size should be strictly positiveatari_lib.py。这保证了后续图像池化与缩放逻辑不会因非正尺寸而崩溃。此外构造函数还做了以下初始化atari_lib.py根据environment.observation_space.shape预分配两个np.uint8类型的临时帧缓冲screen_buffer用于双帧最大池化初始化self.game_over False与self.lives 0lives将在reset()时被真实值覆盖。四、预处理流水线step()内部的完整流程step()是预处理的核心atari_lib.py它把一个动作展开为至多frame_skip帧的底层交互其完整逻辑如下累积奖励在frame_skip次循环中重复执行同一动作将每一步的奖励累加到accumulated_reward最终返回给智能体的奖励是所有子步骤奖励之和测试testFrameSkipAccumulatesReward验证了这一点frame_skip2时每步奖励 1累加后返回 2。兼容新旧 Gym API当use_legacy_gymTrue时底层step()返回(obs, reward, game_over, info)四元组否则按新版 Gymnasium 返回五元组(obs, reward, terminated, truncated, info)并将game_over terminated or truncatedatari_lib.py。生命损失终止信号若terminal_on_life_lossTrue每次子步骤后通过self.environment.env.ale.lives()读取当前生命数若new_lives self.lives则视为终止否则is_terminal game_overatari_lib.py。双帧最大池化在每个子步骤中直接绕过 Gym 的观测调用_fetch_grayscale_observation()从 ALE 底层抓取灰度画面并写入screen_buffer源码注释说明这样做稍快一些。在循环的最后两帧time_step frame_skip - 2将灰度帧交替写入缓冲区的两个槽位然后由_pool_and_resize()对两帧做逐元素最大池化atari_lib.py。最大池化可以消除隔行闪烁flickering伪影因为 Atari 中某些精灵仅在奇数/偶数帧交替渲染。提前终止一旦is_terminal为真立即跳出循环。因此文档注释特别提醒若因生命损失或对局结束而终止实际执行的子步骤可能少于frame_skip且此时返回的观测可能不包含有效图像数据应予以忽略atari_lib.py。4.1_fetch_grayscale_observation直接抓取灰度帧def _fetch_grayscale_observation(self, output): self.environment.env.ale.getScreenGrayscale(output) return output该方法通过ale_py的底层接口getScreenGrayscale()将当前屏幕直接写入预先分配的output缓冲atari_lib.py。这样做避免了 Gym 观测的转换开销是性能优化的关键细节。4.2_pool_and_resize池化与缩放def _pool_and_resize(self): if self.frame_skip 1: np.maximum( self.screen_buffer[0], self.screen_buffer[1], outself.screen_buffer[0], ) transformed_image cv2.resize( self.screen_buffer[0], (self.screen_size, self.screen_size), interpolationcv2.INTER_AREA, ) int_image np.asarray(transformed_image, dtypenp.uint8) return np.expand_dims(int_image, axis2)该方法的要点atari_lib.py当frame_skip 1时用np.maximum对两个灰度帧做逐元素最大池化且原地写回screen_buffer[0]以节省内存使用 OpenCV 的cv2.resize配合cv2.INTER_AREA插值将画面缩放到(screen_size, screen_size)。INTER_AREA适合缩小图像能有效抑制混叠最终通过np.expand_dims(..., axis2)将形状变为(screen_size, screen_size, 1)即单通道灰度图这也是 Nature DQN 卷积网络输入的标准格式后续堆叠由智能体层完成单帧本身只有 1 个通道。五、Gym 兼容接口与观测空间为了让AtariPreprocessing无缝嵌入 Gym 生态它实现了完整的接口代理atari_lib.pyobservation_space返回gymnasium.spaces.box.Box(low0, high255, shape(screen_size, screen_size, 1), dtypenp.uint8)与处理后观测的真实形状一致atari_lib.py。action_space/reward_range/metadata直接透传底层环境。reset()先重置底层环境通过ale.lives()获取初始生命数将首帧灰度画面抓取到screen_buffer[0]并把screen_buffer[1]填充为 0随后返回_pool_and_resize()的结果——即首帧与全零帧的池化结果atari_lib.py。render(mode)在预处理之前渲染当前屏幕支持rgb_array返回原始 ALE 图像与human通过 Gym 渲染器显示两种模式atari_lib.py。close()透传底层环境的关闭方法。六、在create_atari_environment中的装配与使用AtariPreprocessing是 Dopamine 标准 Atari 环境工厂create_atari_environment的一部分。该工厂同样是gin.configurable的atari_lib.py其核心装配逻辑如下atari_lib.pyelse: # Strip out the TimeLimit wrapper from Gym, which caps us at 100k frames... env env.env env AtariPreprocessing(env) return env具体流程为工厂先根据sticky_actions选择环境版本——使用use_legacy_gym时对应{game_name}NoFrameskip-v0/v4否则使用新版ALE/{game_name}-v5并设置repeat_action_probability0.25sticky actions或0.0确定性版本随后剥离 Gym 的TimeLimit包装器它会把单局限制在 10 万帧且与状态保存/恢复配合不佳改为由 Dopamine 内部处理 10.8 万帧30 分钟的时限最后用AtariPreprocessing包装环境。这就是step()中self.environment.env.ale.lives()这类双重.env解包链的由来。此外当use_ppo_preprocessingTrue时工厂会走另一条基于atari_wrappers的 PPO 预处理分支NoopResetEnv→MaxAndSkipEnv→EpisodicLifeEnv→FireResetEnv→ClipRewardEnv→ResizeObservation→GrayScaleObservation→FrameStack最后再包GameOverWrapper这与AtariPreprocessing是两套并行的预处理方案可根据算法需求选择atari_lib.py。七、通过 gin 配置参数化以terminal_on_life_loss为例由于AtariPreprocessing被gin.configurable装饰它的每个参数都可以在.gin配置文件中直接覆盖。仓库内大量实验配置都显式开启了生命损失终止信号例如dopamine/tf/agents/dqn/configs/dqn_nature.ginAtariPreprocessing.terminal_on_life_loss True并配合atari_lib.create_atari_environment.sticky_actions False复现 Mnih et al. (2015) 的确定性设置dopamine/tf/agents/dqn/configs/dqn_icml.gin、dopamine/tf/agents/rainbow/configs/c51_icml.gin、dopamine/tf/agents/rainbow/configs/rainbow_aaai.gin、dopamine/tf/agents/implicit_quantile/configs/implicit_quantile_icml.gin 同样开启此选项实验室配置如 dopamine/labs/atari_100k/configs/DER.gin、dopamine/labs/atari_100k/configs/SPR.gin、dopamine/labs/cale/configs/sac_cale_100k.gin、dopamine/labs/moes/configs/DER.gin也均将其置为True。一个典型的 gin 配置片段如下import dopamine.discrete_domains.atari_lib atari_lib.create_atari_environment.game_name Pong atari_lib.create_atari_environment.sticky_actions False AtariPreprocessing.terminal_on_life_loss True # AtariPreprocessing.frame_skip 4 # 默认值 # AtariPreprocessing.screen_size 84 # 默认值注意frame_skip与screen_size在配置中通常保持默认值4 和 84因为这是 Nature DQN 协议的标准设置需要复现 Atari 100k 等低样本量实验时也一般只调整terminal_on_life_loss与环境的sticky_actions而保留图像预处理参数不变。八、测试验证行为契约的可执行证明仓库中的单元测试 tests/dopamine/discrete_domains/atari_lib_test.py 用MockEnvironment模拟 ALE 行为逐条验证了本类的核心契约testResetPassesObservation用frame_skip1, screen_size16构造环境后reset()返回的观测形状必须为(16, 16, 1)验证了缩放与单通道输出的正确性testTerminalPassedThrough在frame_skip1下运行恰好max_steps次前max_steps-1步is_terminalFalse最后一步为True验证终止信号的透传testFrameSkipAccumulatesRewardframe_skip2时单步奖励 1返回的累计奖励必须为 2验证奖励累加逻辑testMaxFramePooling第一帧观测值为 2、第二帧为 0最大池化后观测值必须全为 8模拟环境按递减规则生成画面验证双帧逐元素最大池化行为。九、总结AtariPreprocessing是 Dopamine 框架中标准 Atari 观测流水线的基石它把帧跳过、奖励累积、可选的生命损失终止信号、灰度化 双帧最大池化、以及 84×84 下采样这五件事封装为一个 Gym 兼容包装器并通过gin.configurable暴露为可配置项。无论是 TF 版 DQN/Rainbow/IQN 实验还是 JAX 版的离散域智能体最终进入神经网络的都是这个类产出的(84, 84, 1)单通道灰度帧历史堆叠由智能体层完成。如果你需要在自己的实验里复现论文级预处理协议直接复用create_atari_environment即可获得完整装配需要定制时则可以通过 gin 覆盖frame_skip、terminal_on_life_loss、screen_size等参数。相关配套文档可进一步参阅 AtariPreprocessing.md 的姊妹篇 create_atari_environment.md 与 GameOverWrapper.md完整源码位于 dopamine/discrete_domains/atari_lib.py。赞分享机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载相关推荐Dopamine 强化学习框架中 AtariPreprocessingAtari 2600 图像预处理管线全解析Dopamine 强化学习框架中 AtariPreprocessingAtari 2600 图像预处理管线全解析 导读 AtariPreprocessing强化学习机器学习深度学习Dopamine 中 create_atari_environment基于 Machado 协议的 Atari 2600 Gym 环境工厂与预处理全解析Dopamine 中 create_atari_environment基于 Machado 协议的 Atari 2600 Gym 环境工厂与预处理全解析 导读强化学习机器学习深度学习Dopamine 的 create_atari_environmentAtari 2600 环境的标准化预处理与实战配置Dopamine 的 create_atari_environmentAtari 2600 环境的标准化预处理与实战配置 导读 dopamine.discre机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
MySQL 内核实战(2):B+Tree 索引与最左前缀 问题背景
上一篇算清了"页"的账:一行数据带着记录头、NULL 位图和变长列表挤进 16KB 的页,页满就分裂。但那些页之间还只是零散文件,本篇解决下一个问题:三千万行的表,为什么 WHERE id8765432 只读三四个页就… · 2026/9/24 1:30:22
校园网IPv4/IPv6平滑过渡三大实战方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 1:30:10
医用无菌热合包装机哪家生产厂家好 在一次性医用耗材和医疗器械生产环节里,无菌屏障系统的完整性直接关系到产品放行。纸塑袋、透析纸PE膜结构的热封质量,决定了灭菌后能否维持无菌状态。也正因如此,"医用无菌热合包装机哪家生产厂家好"成了不少从业者入行或扩产时反… · 2026/9/24 1:29:33
EKS IRSA 调 SQS 仍 403:先补 GetQueueUrl 一句话摘要:Pod 已挂 IRSA,策略里也有收发删,SDK 仍 AccessDenied——缺的往往是 GetQueueUrl,且不要去改节点角色。 目录 前言 一、先分清三条链 二、IRSA 只读盘点 三、收发删不够:补三个只读动作 四、队列不存在不是没权限 · 2026/9/24 2:12:31
2026年AI视频总结工具推荐:支持B站、课程和播客的4款实用工具 课程录播、B站知识视频、播客和访谈越来越长,但真正有价值的内容往往藏在几十分钟甚至几小时的音视频里。AI视频总结工具可以帮助用户提取重点、生成结构化内容,并在需要时快速回看原视频。选工具时,建议重点看三件事:是否支持你的… · 2026/9/24 2:12:00
千问 8 通用立减,输入专属活动口令,外卖打车都能用 1、先把千问这个APP下载在手机里2、然后在对话框里输申领口令(固定中文135523),方法如下3、会看到"待领取"按钮,按照页面指引完成账号绑定,成功后券就会自动发放到你的卡包中。整个流程也就完成了࿰… · 2026/9/24 2:11:42
Ekko Agent Skill 创作指南:基于 skill-creator 的设计、创建、维护与验证全流程 AI 应用人工智能AI Agent本地部署前端后端工作流自动化 【免费下载链接】ekko-studio Ekko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web. 项目地址: https://gitcode.com/gh_mirr… · 2026/9/24 2:11:42
ESP32 SPI驱动W5500以太网:从调库到时序实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 2:11:30
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44