
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载jrl/envs/README.md是 JRLJax 离线强化学习研究代码库中关于环境Environment接入规范的核心文档。本文以该文档为主体骨架结合 jrl/envs/init.py、jrl/envs/d4rl.py、jrl/envs/dm_control.py 以及 jrl/localized/runner.py 等源码系统讲解 JRL 环境的统一抽象、内置环境实现、注册方式与实战调用流程。读完本文你将掌握如何在 JRL 中新增自定义环境并理解 dm_env 规范、Acme wrappers、单精度封装等底层机制。环境模块定位JRL 的离线 RL 研究基石JRL 是基于 Jax 与 Acme RL 库构建的离线强化学习研究代码库其核心论文为 Why so pessimistic? Estimating uncertainties for offline RL through ensembles, and why their independence matters.jrl/README.md。整个代码库按职责划分为四个模块Agents训练算法实现详见 jrl/agents/README.mdDatasets离线数据集加载详见 jrl/data/README.mdEnvironments环境接入与统一封装即本文主题详见 jrl/envs/README.mdevaluation / localized / utils评估、训练入口 runner 与工具函数jrl/envs/目录下仅有三个文件README.md、init.py、d4rl.py、dm_control.py是一个轻量但职责清晰的环境注册与工厂模块。它解决了离线 RL 研究中一个关键痛点不同来源的环境如 Gym/D4RL、DM Control拥有完全不同的 API而 JRL 的 Agent 与 Runner 只消费统一的dm_env接口因此需要一个集中式的环境工厂来完成适配与注册。核心规范所有环境必须封装为dm_envjrl/envs/README.md全文只有两条核心指令它们是整个环境模块的设计契约环境必须被封装为dm_envDeepMind Environment接口封装后的环境必须注册到 jrl/envs/init.py 的工厂函数中。这两条规范直接决定了 JRL 全链路代码的写法。从 jrl/localized/runner.py 可以看到训练入口通过统一的工厂函数创建环境create_env_fn lambda: envs.create_environment( FLAGS.task_class, FLAGS.task_name, FLAGS.single_precision_env) environment create_env_fn() spec specs.make_environment_spec(environment)也就是说Agent 的训练、评估乃至环境规格推导make_environment_spec全部只依赖dm_env.Environment接口。任何不满足该接口的环境都无法直接进入 JRL 的训练管线。这正是 README 强调封装规范的根本原因。工厂函数源码剖析jrl/envs/init.py 实现了两个层次的工厂函数def _create_environment(task_class, task_name, **kwargs): if task_class d4rl: from jrl.envs import d4rl return d4rl.create_d4rl_env(task_name, **kwargs) elif task_class dm_control: from jrl.envs import dm_control return dm_control.create_dm_control_env(task_name) else: raise NotImplementedError(task class not handled!) def create_environment(task_class, task_name, single_precisionFalse, **kwargs): env _create_environment(task_class, task_name, **kwargs) if single_precision: env wrappers.SinglePrecisionWrapper(env) return env关键设计点以task_class分派以task_name定位具体任务task_class决定环境来源当前支持d4rl与dm_controltask_name是具体任务标识如antmaze-large-diverse-v0。single_precision参数默认False。开启后会用 Acme 的wrappers.SinglePrecisionWrapper将环境内部所有 spec 与 timestep 强制转为 float32避免 float64 导致的 Jax XLA 编译问题——这是 Jax 训练管线中的常见坑值得所有 RL 研究者注意。延迟导入lazy import工厂函数内部才from jrl.envs import d4rl避免导入 JRL 时强制加载 gym/d4rl 等重依赖加快模块加载速度。未支持类目直接抛NotImplementedError新增环境来源必须同时修改该工厂函数否则运行时报错。内置环境实现一D4RLGym 生态jrl/envs/d4rl.py 提供了 D4RL 任务的创建逻辑def create_d4rl_env(task_name): env gym.make(task_name) env wrappers.GymWrapper(env) return env实现要点使用gym.make(task_name)创建 Gym 环境task_name即 Gym/D4RL 的标准任务名例如antmaze-large-diverse-v0、halfcheetah-medium-expert-v2通过 Acme 的wrappers.GymWrapper将 Gym 环境包装为dm_env.Environment接口从而满足 README 的第一条规范D4RL 是离线 RL 的标准基准数据集其环境直接支持通过 gym 注册表创建因此这一路径是 JRL 训练 D4RL 基准任务如 BC、CQL、MSG 等算法的默认选择。从 jrl/agents/bc/README.md 可以看到实际运行 D4RL 任务的命令行用法--task_class d4rl \ --task_name antmaze-large-diverse-v0 \这与 jrl/data/d4rl.py 中的数据集加载逻辑一一对应task_class d4rl时加载 D4RL 数据集保证环境与数据来源一致。内置环境实现二DM Controljrl/envs/dm_control.py 提供 DeepMind Control Suite 支持其实现比 D4RL 多了一层自定义封装class FlatObservationWrapper(wrappers.EnvironmentWrapper): def _convert_obs(self, obs): flat_obs [v.flatten() for v in obs.values()] return np.concatenate(flat_obs, axis-1) def reset(self): ts self._environment.reset() return ts._replace(observationself._convert_obs(ts.observation)) def step(self, action): ts self._environment.step(action) return ts._replace(observationself._convert_obs(ts.observation)) def observation_spec(self): original_obs_spec self._environment.observation_spec() types [] sizes [] for k, v in original_obs_spec.items(): types.append(v.dtype) sizes.append(np.prod(v.shape)) assert all(x types[0] for x in types), All types not the same! total_size sum(sizes) return specs.Array(shape(total_size,), dtypetypes[0], nameflat_obs_spec) def create_dm_control_env(task_name): split_name task_name.split(__) domain_name, task_name split_name[0], split_name[1] env suite.load(domain_namedomain_name, task_nametask_name) env FlatObservationWrapper(env) return env实现要点任务名编码约定DM Control 任务的task_name使用domain__task格式例如cartpole__swingup工厂函数内部用split(__)拆分为domain_name与task_name再传给suite.loadFlatObservationWrapperDM Control 的观测是 dict 结构如关节位置、速度等而 JRL 的 Agent 期望扁平化向量观测。该 wrapper 继承 Acme 的EnvironmentWrapper将 dict 观测展平拼接为单一向量并同步重写了observation_spec校验所有子观测 dtype 一致后返回拼接后的specs.Array这是 README 规范的最佳实践示范在不改动底层环境的前提下通过 wrapper 层完成接口与格式适配。如何在 JRL 中新增自定义环境实战步骤结合 README 的规范与源码结构接入一个新环境例如自定义 Gym 环境需要四步封装为 dm_env确保环境实现dm_env.Environment的reset/step/observation_spec/action_spec/reward_spec接口。若你的环境是 Gym 格式可直接复用 Acme 的wrappers.GymWrapper若是其他格式可参考 FlatObservationWrapper 继承wrappers.EnvironmentWrapper自行包装。新建创建函数参考create_d4rl_env/create_dm_control_env在jrl/envs/下新增模块如my_env.py提供接收task_name并返回 dm_env 的工厂函数。注册到工厂修改 jrl/envs/init.py 的_create_environment新增task_class分支并调用你的创建函数。联调验证通过 jrl/localized/runner.py 运行--task_class my_env_class --task_name your_task启动训练检查环境规格推导与 rollout 是否正常若遇到 float64 精度问题可加--single_precision_env开启单精度封装。完整运行示例以 JRL 自带的 BC 算法 D4RL 任务为例完整命令见 jrl/agents/bc/README.mdpython3 -m jrl.localized.runner \ --pdb_post_mortem \ --debug_nansFalse \ --create_saved_model_actorFalse \ --num_steps 11000 \ --eval_every_steps 500 \ --episodes_per_eval 100 \ --batch_size 51200 \ --root_dir /tmp/test_bc \ --seed 42 \ --algorithm bc \ --task_class d4rl \ --task_name antmaze-large-diverse-v0 \ --gin_bindingsbc.config.BCConfig.num_sgd_steps_per_step200 \ --gin_bindingsbc.config.BCConfig.policy_lr1e-4 \ --gin_bindingsbc.config.BCConfig.loss_typeMLE \ --gin_bindingsbc.config.BCConfig.entropy_regularization_weight0其中--task_class d4rl与--task_name antmaze-large-diverse-v0正是通过本文介绍的环境工厂被解析并创建若将--task_class改为dm_control、--task_name改为cartpole__swingup这类格式即可切换为 DM Control 环境。--gin_bindings则通过 gin 配置库注入算法超参各算法参数定义见对应config.py。与其他模块的协作关系环境模块并非孤立存在它与 JRL 的其余模块构成完整闭环与数据模块对应jrl/data/init.py 采用与envs完全相同的task_class分派模式d4rl→d4rl.create_d4rl_data_iter保证离线数据与环境一一对应与 Runner 衔接jrl/localized/runner.py 先创建环境、推导environment_spec再将其交给agents.create_agent构建智能体环境规范观测/动作空间是 Agent 网络结构定义的输入与算法模块联动jrl/agents/下各算法bc、cql、msg、snr、batch_ensemble_msg的 README 均以--task_class d4rl作为标准示例说明该工厂模式是全部算法的通用环境入口。小结jrl/envs/README.md虽然简短却定义了 JRL 环境接入的两条铁律——统一 dm_env 抽象 集中式工厂注册。从源码可见这一设计带来了三方面收益环境来源可扩展新增task_class即可、接口对 Agent 完全透明一律消费 dm_env、精度/观测格式等共性问题可在 wrapper 层统一解决。如果你打算在 JRL 中复现或扩展离线 RL 实验掌握本模块的封装与注册机制是接入新基准的第一步。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐MarkItDown 快速上手把办公文档转成 Markdown 的保姆级指南MarkItDown 快速上手把办公文档转成 Markdown 的保姆级指南 你有没有被这种场景折腾过手里一堆 PDF、Word、Excel 和 PPT想人工智能深度学习NLP计算机视觉强化学习JRL 中的 CQL 离线强化学习实现配置参数、BC 预热与 D4RL 训练实战指南JRL 中的 CQL 离线强化学习实现配置参数、BC 预热与 D4RL 训练实战指南 本指南以 Google Research 的 JRLJax Reinf人工智能深度学习NLP计算机视觉强化学习signal-back高级技巧解决备份文件损坏、密码错误与附件提取失败的实用方法signal back高级技巧解决备份文件损坏、密码错误与附件提取失败的实用方法 signal back 是一款用于在应用外解密Signal加密备份的工具采人工智能深度学习NLP计算机视觉强化学习上一篇Jaeger分布式追踪3步掌握微服务性能监控的终极指南下一篇i3lock-color vs 原生i3lock10个你必须切换的理由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考