机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载导读dopamine.continuous_domains.run_experiment.ContinuousRunner是 Dopamine 研究框架中面向连续控制任务如 MuJoCo 的 HalfCheetah、Ant、Walker2d 等 Gym 环境的专用实验运行器它复用了离散控制域Runner的整体调度骨架但完全面向 JAX/Flax 生态的 AgentSAC、PPO 及其 CALE 变体编写。阅读本文后你将掌握 ContinuousRunner 的完整参数体系、create_continuous_agent与create_continuous_runner两个工厂函数的内部逻辑、训练/评估迭代的执行细节并能够基于仓库内现成的 gin 配置直接启动一个连续控制实验。一、ContinuousRunner 是什么根据官方 API 文档的定义ContinuousRunner是一个 Object that handles running Dopamine experiments负责运行 Dopamine 实验的对象。它继承自dopamine.discrete_domains.run_experiment.Runner核心文档说明为This is mostly the same as discrete_domains.Runner, but is written solely for JAX/Flax agents.即它在调度逻辑上与离散控制域的 Runner 基本一致但唯一区别在于它是专门为 JAX/Flax Agent 编写的。这意味着它不需要 TensorFlow Session、不需要num_actions这样的离散动作维度概念而是直接面向连续动作空间gym.spaces.Box进行环境交互、训练与评估。从源码看该类的实际定义位于 dopamine/continuous_domains/run_experiment.py并被gin.configurable装饰因此它的所有构造参数都可以通过 gin 配置文件进行绑定与覆盖。类继承与模块结构continuous_domains模块整体结构如下dopamine/continuous_domains/run_experiment.py核心模块包含ContinuousRunner、ContinuousTrainRunner两个运行器类以及create_continuous_agent、create_continuous_runner两个工厂函数dopamine/continuous_domains/train.py命令行入口脚本负责解析 flags、加载 gin 配置并启动实验配套的 JAX Agent 实现位于 dopamine/jax/agents/sac/sac_agent.py、dopamine/jax/agents/ppo/ppo_agent.py 以及 dopamine/labs/cale/ 下的 CALE 变体。模块顶部还通过load_gin_configs base_run_experiment.load_gin_configs直接复用了基类模块中基于gin.parse_config_files_and_bindings的配置加载逻辑参见 dopamine/discrete_domains/run_experiment.py。二、构造函数与全部参数详解ContinuousRunner.__init__的完整签名与默认值如下见 run_experiment.pydef __init__( self, base_dir, create_agent_fn, create_environment_fngym_lib.create_gym_environment, checkpoint_file_prefixckpt, logging_file_prefixlog, log_every_n1, num_iterations200, training_steps250000, evaluation_steps125000, max_steps_per_episode1000, clip_rewardsFalse, use_legacy_loggerTrue, ):各参数含义与默认值如下表参数类型默认值说明base_dirstr必填承载所有子目录checkpoints、logs 等的基础目录create_agent_fncallable必填接收环境并返回 Agent 的工厂函数create_environment_fncallablegym_lib.create_gym_environment接收问题名并创建 Gym 环境的函数checkpoint_file_prefixstrckptcheckpoint 文件前缀logging_file_prefixstrlog日志文件前缀log_every_nint1写日志的频率每 N 次迭代写一次num_iterationsint200迭代次数阈值必须大于 start_iterationtraining_stepsint250000每个迭代中训练阶段的步数evaluation_stepsint125000每个迭代中评估阶段的步数max_steps_per_episodeint1000单个 episode 超过该步数后强制终止clip_rewardsboolFalse是否将奖励裁剪到 [-1, 1]use_legacy_loggerboolTrue是否使用 legacy Logger即将废弃由 CollectorDispatcher 取代与离散域 Runner 的默认值差异对比离散域基类 Runner 的构造参数可以明显看到 ContinuousRunner 针对连续控制场景的调整max_steps_per_episode默认值为1000离散域 Atari 为27000符合 MuJoCo 等连续控制环境单 episode 步数上限的惯例clip_rewards默认值为False离散域为True因为连续控制任务通常不裁剪奖励create_environment_fn默认指向gym_lib.create_gym_environment而不是 Atari 环境创建函数。构造函数执行的初始化流程根据源码与文档说明构造函数依次执行以下动作run_experiment.py记录_legacy_logger_enabled、_logging_file_prefix、_log_every_n、_num_iterations、_training_steps、_evaluation_steps、_max_steps_per_episode、_base_dir、_clip_rewards等内部状态调用_create_directories()创建checkpoints目录若启用 legacy logger同时创建logs目录并给出弃用警告见 基类源码创建 TensorBoardSummaryWriter基于 Flax 的flax.metrics.tensorboard通过create_environment_fn()初始化 Gym 环境调用create_agent_fn(environment, summary_writer...)初始化 Agent调用_initialize_checkpointer_and_maybe_resume(checkpoint_file_prefix)从最新 checkpoint 恢复若存在创建CollectorDispatcher并注入 Agent若 Agent 实现了set_collector_dispatcher方法用于新版指标上报体系。其中 checkpoint 恢复逻辑来自基类通过checkpointer.get_latest_checkpoint_number探测已存在的 checkpoint若存在则加载并调用agent.unbundle成功后将start_iteration设置为current_iteration 1从而实现断点续训基类源码。三、Agent 工厂函数 create_continuous_agentcreate_continuous_agent是 ContinuousRunner 默认使用的 Agent 创建函数run_experiment.py同样由gin.configurable装饰。其签名与文档一致create_continuous_agent( environment: gym_lib.GymPreprocessing, agent_name: str, summary_writer: Optional[tensorboard.SummaryWriter] None ) - JaxDQNAgent参数说明来自官方 API 文档environment一个 Gym 环境agent_name要创建的 Agent 名称字符串summary_writerTensorFlow summary writer用于将 Agent 内部的训练统计写入 TensorBoard。返回值一个强化学习 Agent。异常若agent_name不在支持列表中抛出ValueError。支持四种 Agent 名称从源码可见该工厂支持以下agent_name分支agent_name返回的 Agent前置断言关键构造参数sacsac_agent.SACAgent动作/观测空间必须是spaces.box.Boxaction_shape、action_limits由动作空间 low/high 提供、observation_shape、action_dtype、observation_dtype、summary_writerppoppo_agent.PPOAgent动作/观测空间必须是spaces.Boxaction_shape、observation_shape、summary_writer以sac_cale开头sac_cale.SACCALEAgent无显式断言与sac相同的动作/观测参数集以ppo_cale开头ppo_cale.PPOCALEAgent无显式断言与ppo相同的参数集其他任何名称都会触发ValueError(fUnknown agent: {agent_name})。CALEContrastive Accelerated Learning变体的实现位于 dopamine/labs/cale/sac_cale.py 与 dopamine/labs/cale/ppo_cale.py。注意由于使用agent_name.startswith(sac_cale)/startswith(ppo_cale)进行判断配置时可传入sac_cale、sac_cale_100k等带后缀的名称对应 dopamine/labs/cale/configs/ 中的配置文件。测试验证仓库测试 tests/dopamine/continuous_domains/run_experiment_test.py 对该工厂的行为做了明确验证testCreateContinuousAgentReturnsAgent传入agent_namesac环境动作为 4 维、观测为 5 维的 Box断言返回SACAgent实例testCreateContinuousAgentWithInvalidNameRaisesException传入invalid_name断言抛出ValueError。四、运行器工厂 create_continuous_runner 与调度模式create_continuous_runner负责根据调度字符串返回对应的 Runner 实例run_experiment.pycreate_continuous_runner(base_dir, schedulecontinuous_train_and_eval)参数base_dirstr承载所有子目录的基础目录schedulestr选择使用哪种 Runner。返回值一个 Runner 类似对象。异常遇到未知 schedule 时抛出ValueError。两种调度模式schedule 取值返回的 Runner行为continuous_train_and_eval默认ContinuousRunner持续进行训练与评估直到达到最大迭代数continuous_trainContinuousTrainRunner持续只训练不评估直到达到最大迭代数源码中对该函数有assert base_dir is not None的前置断言传入None会直接触发断言错误。对应的单元测试testCreateContinuousRunnerCreatesCorrectRunner通过参数化用例验证了continuous_train_and_eval→ContinuousRunner、continuous_train→ContinuousTrainRunner的映射关系以及invalid_name抛ValueError。五、ContinuousTrainRunner纯训练模式ContinuousTrainRunner继承自ContinuousRunner文档描述为This is mostly the same as discrete_domains.TrainRunner, but is written solely for JAX/Flax agents.它与ContinuousRunner的核心区别run_experiment.py构造时强制关闭评估模式__init__在调用父类构造后立即执行self._agent.eval_mode False重写_run_one_iteration每个迭代只执行_run_train_phase训练阶段不再执行_run_eval_phase重写_save_tensorboard_summaries只写训练相关的三个指标——Train/NumEpisodes、Train/AverageReturns、Train/AverageStepsPerSecond不写评估指标。PPO 的默认配置 dopamine/jax/agents/ppo/configs/ppo.gin 就使用了schedule continuous_train因为 PPO 的 on-policy 特性决定了它不需要单独的大规模评估阶段配置中ContinuousRunner.evaluation_steps未被绑定max_steps_per_episode None表示 episode 可以在迭代之间延续。六、迭代执行流程与指标输出训练/评估双阶段迭代ContinuousRunner继承自基类的_run_one_iteration基类源码完成一次迭代创建IterationStatistics对象执行_run_train_phase将agent.eval_mode置为False运行足够多的完整 episode 直至累计步数达到training_steps统计train_average_return与train_average_steps_per_second执行_run_eval_phase将agent.eval_mode置为True不学习地运行至累计步数达到evaluation_steps统计eval_average_return若存在 CollectorDispatcher写入 5 个StatisticsInstanceTrain/NumEpisodes、Train/AverageReturns、Train/AverageStepsPerSecond、Eval/NumEpisodes、Eval/AverageReturns调用_save_tensorboard_summaries将同样 5 个标量写入 TensorBoard见 ContinuousRunner._save_tensorboard_summaries。连续控制域中 episode 的终止条件为环境game_over为真或步数达到max_steps_per_episode默认 1000。若max_steps_per_episode设为None则改用_run_continued_episode在迭代之间延续 episode。顶层调度循环run_experiment()方法基类源码通过tqdm进度条遍历range(start_iteration, num_iterations)每个迭代依次执行运行一个迭代 → legacy logger 记录 → checkpoint 保存 → CollectorDispatcher flush。全部结束后 flush summary writer 并关闭 dispatcher。若num_iterations start_iteration例如 checkpoint 已训练完毕会打印警告并直接返回。基于 legacy logger 的日志当use_legacy_loggerTrue时每次迭代的统计数据会以iteration_{i}为键存入 logger并每log_every_n次迭代调用一次log_to_file(logging_file_prefix, iteration)落盘checkpoint 保存时也会将logs数据一并打包基类源码。同时每次迭代结束都会调用agent.bundle_and_checkpoint(checkpoint_dir, iteration)保存模型权重。七、命令行入口与完整 gin 配置实战命令行入口 train.pydopamine/continuous_domains/train.py 提供了标准的启动入口定义了三个 flagsFlag类型说明--base_dirstr必填承载所有子目录的基础目录--gin_filesmulti-stringgin 配置文件路径列表如dopamine/jax/agents/sac/configs/sac.gin--gin_bindingsmulti-string覆盖配置文件中参数的 gin 绑定其main流程为设置 INFO 级日志 →run_experiment.load_gin_configs(gin_files, gin_bindings)加载配置 →create_continuous_runner(base_dir)创建 Runner →runner.run_experiment()启动实验。base_dir被标记为必填 flag。一个典型的启动命令如下python -m dopamine.continuous_domains.train \ --base_dir/tmp/dopamine/sac_halfcheetah \ --gin_filesdopamine/jax/agents/sac/configs/sac.gin如需临时覆盖参数例如减少迭代数追加--gin_bindingspython -m dopamine.continuous_domains.train \ --base_dir/tmp/dopamine/sac_halfcheetah \ --gin_filesdopamine/jax/agents/sac/configs/sac.gin \ --gin_bindingsContinuousRunner.num_iterations100SAC 配置示例解读dopamine/jax/agents/sac/configs/sac.gin 是 ContinuousRunner 在连续控制域的标准用法范例其超参遵循 Haarnoja 等人 Soft Actor-Critic Algorithms and ApplicationsarXiv:1812.05905附录 D 表 1。关键绑定如下import dopamine.continuous_domains.run_experiment import dopamine.discrete_domains.gym_lib import dopamine.jax.agents.sac.sac_agent SACAgent.reward_scale_factor 0.1 SACAgent.gamma 0.99 SACAgent.min_replay_history 10_000 # agent steps SACAgent.target_smoothing_coefficient 0.005 SACAgent.target_entropy None # Defaults to -num_action_dims/2 create_optimizer.learning_rate 3.0e-4 create_gym_environment.environment_name HalfCheetah create_gym_environment.version v2 create_continuous_runner.schedule continuous_train_and_eval create_continuous_agent.agent_name sac ContinuousRunner.num_iterations 3_200 ContinuousRunner.training_steps 1_000 ContinuousRunner.evaluation_steps 10_000 # agent steps ContinuousRunner.max_steps_per_episode 1_000 ContinuousRunner.clip_rewards False ReplayBuffer.max_capacity 1_000_000 ReplayBuffer.batch_size 256注意这里同时绑定了ContinuousRunner与ContinuousTrainRunner的create_environment_fngym_lib.create_gym_environment保证无论选择哪种调度模式环境工厂一致。PPO 配置示例解读dopamine/jax/agents/ppo/configs/ppo.gin 则展示了continuous_train纯训练模式与 PPO 特有预处理的使用create_gym_environment.environment_name HalfCheetah create_gym_environment.version v2 create_gym_environment.use_legacy_gym True create_gym_environment.use_ppo_preprocessing True create_continuous_runner.schedule continuous_train create_continuous_agent.agent_name ppo ContinuousRunner.num_iterations 500 ContinuousRunner.training_steps 2048 ContinuousRunner.max_steps_per_episode None PPOAgent.update_period 2048 PPOAgent.num_epochs 10 PPOAgent.batch_size 64 PPOAgent.lambda_ 0.95 ReplayBuffer.max_capacity 2048use_ppo_preprocessingTrue时create_gym_environment会通过 legacy Gym wrappers 依次施加动作裁剪ClipAction、观测归一化NormalizeObservation、观测截断到 [-10, 10]、奖励归一化NormalizeReward等预处理参见 dopamine/discrete_domains/gym_lib.py。八、源码级工作原理补充环境创建链ContinuousRunner 默认通过gym_lib.create_gym_environment创建环境其参数environment_name、version、use_legacy_gym、use_ppo_preprocessing均可由 gin 绑定。环境名会被拼接为{environment_name}-{version}如HalfCheetah-v2再交给 Gym 创建随后包装成GymPreprocessing以供 Agent 使用gym_lib.py。指标上报双轨制从构造与迭代代码可以看到 ContinuousRunner 同时兼容两套指标上报体系legacy Loggeruse_legacy_loggerTrue时启用将每次迭代统计以iteration_{i}键写入内存 dict并按log_every_n落盘到logs/目录CollectorDispatcher新体系构造时创建collector_dispatcher.CollectorDispatcher(base_dir)并通过反射调用 Agent 的set_collector_dispatcher注入每次迭代通过write([...StatisticsInstance...])上报迭代结束flush()实验结束close()。相关实现见 dopamine/metrics/collector_dispatcher.py 与 dopamine/metrics/statistics_instance.py。从源码注释 This will be deprecated soon, replaced with the new CollectorDispatcher setup 可以看出官方正推动从 legacy Logger 向 CollectorDispatcher 迁移。与 JAX Agent 的配合由于ContinuousRunner专为 JAX/Flax Agent 设计其构造不再传递 TensorFlow Session而是直接以summary_writer关键字传给 Agent 工厂。工厂内部根据agent_name将环境的action_space/observation_space信息shape、low/high 边界、dtype解构后传入对应 Agent 构造函数完成连续动作空间的原生支持。九、小结ContinuousRunner与其子类ContinuousTrainRunner构成了 Dopamine 连续控制实验的标准运行骨架通过create_continuous_runner选择调度模式通过create_continuous_agent按名称实例化 SAC/PPO/CALE 系列 JAX Agent以迭代为单位交替执行训练与评估或纯训练同时输出 TensorBoard 标量、legacy 日志与 CollectorDispatcher 指标并通过 checkpoint 机制支持断点续训。配合 sac.gin、ppo.gin 等配置文件开发者无需编写任何 Python 代码即可启动并复现连续控制实验而 tests/dopamine/continuous_domains/run_experiment_test.py 则为工厂函数与调度映射的正确性提供了可参考的测试范式。赞分享机器学习深度学习【免费下载链接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.项目地址https://gitcode.com/gh_mirrors/do/dopamine点击查看免费下载相关推荐Agent Zero /api/upload 接口剖析通用文件上传端点的契约、实现与安全防护Agent Zero /api/upload 接口剖析通用文件上传端点的契约、实现与安全防护 本篇基于 Agent Zero 仓库中的 DOX 档案 api/机器学习深度学习Dopamine create_continuous_agent 深度解析连续控制域 RL Agent 的统一工厂与 Gin 配置实战Dopamine create_continuous_agent 深度解析连续控制域 RL Agent 的统一工厂与 Gin 配置实战 导读 在 Dopami机器学习深度学习Dopamine 连续控制域实验入口create_continuous_runner 完整解析与实战指南Dopamine 连续控制域实验入口create_continuous_runner 完整解析与实战指南 导读 dopamine.continuous_dom机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
