【免费下载链接】Minari
A standard format for offline reinforcement learning datasets, with popular reference datasets and related utilities
Minari是一个面向离线强化学习(Offline RL)的数据集标准与托管框架,它为数据集定义了统一的 ID 命名规则、元数据格式和目录结构。本文带你一文看懂 Minari 数据集标准的三大核心:Dataset ID 命名语法、三层元数据体系与本地目录布局,帮助你在几分钟内快速定位、下载并读懂任意一个 Minari 数据集。
上图是 Minari 官方教程所用数据集
D4RL/pen/human-v2中一个观测帧的真实数据(教程源码)——这正是 Minari 标准所规范的观测(observations)内容。
Dataset ID 命名语法:一个 ID 看懂数据集身份
Minari 数据集的目录以Dataset ID命名,它必须符合如下语法(定义于 docs/content/dataset_standards.md):
(namespace/)(env_name/)dataset_name(-v(version))四个组成部分的含义:
| 组成部分 | 是否可选 | 含义 | 示例 |
|---|---|---|---|
namespace | ✅ 可选 | 命名空间,用于把一组数据集归到共同子目录,可任意嵌套 | D4RL |
env_name | ✅ 可选 | 数据集来源的环境名,官方强烈建议使用 | door、pen |
dataset_name | ❌ 必填 | 描述数据集内容,如数据采集方式 | human(人类演示) |
version | ✅ 可选 | 整数版本号,从 0 开始 | v0、v2 |
两个直观例子 🌰:
- 无命名空间:Adroit 开门环境的初始版本人类数据 →
door/human-v0 - 带命名空间:同样的数据放到
D4RL命名空间下 →D4RL/door/human-v0
ID 的合法性由正则校验,并可通过一对函数互转:
- 解析:parse_dataset_id(),将 ID 拆分为
(namespace, dataset_name, version)三元组 - 生成:gen_dataset_id(),由属性反向拼出 ID 字符串
💡长尾提示:如果 ID 书写不规范(比如版本号缺失、多写了斜杠),Minari 会抛出Malformed dataset ID错误并附上标准格式提示。
本地目录结构:数据集存放在哪里?
Minari 将所有本地数据集存放在统一的根目录下,默认路径为~/.minari/datasets/,可通过环境变量MINARI_DATASETS_PATH自定义(实现见 minari/storage/datasets_root_dir.py)。
以minari download D4RL/pen/human-v2为例,下载后的目录长这样 📁:
~/.minari/datasets/ └── D4RL/ ├── namespace_metadata.json ← 命名空间元数据(可含多级) └── pen/ └── human-v2/ ← 数据集目录,与 Dataset ID 最后一级同名 ├── namespace_metadata.json └── data/ ← 数据文件目录(必需) ├── metadata.json ← 数据集全局元数据 └── main_data.hdf5 ← 主数据文件(HDF5 或 Arrow 格式)几个关键规则:
- 数据集目录与命名空间目录分离:
D4RL和pen是命名空间(可嵌套),只有最后一段human-v2才是真正的数据集目录; - 数据文件统一放在
data/子目录,目前支持两种文件格式:HDF5(主文件名main_data.hdf5,见 minari/dataset/_storages/hdf5_storage.py)和Arrow,创建数据集时二选一; - 远程托管数据集与本地使用同一套 ID 体系,
minari list remote即可浏览 Farama 官方服务器上的全部数据集。
命名空间的创建、更新与元数据读写 API 位于 minari/namespace.py,API 文档见 docs/api/namespace/namespace.md。
元数据体系:三层描述让数据集"会说话"
Minari 的元数据分三层,全部以 JSON 格式存储、人机均可读:
数据集全局元数据(metadata.json)
创建数据集时可附带全局元数据,默认包含以下属性(完整表格见 docs/content/dataset_standards.md):
| 属性 | 类型 | 说明 |
|---|---|---|
dataset_id | str | 数据集唯一标识(必填) |
total_episodes | int | 总回合数(必填,自动计算) |
total_steps | int | 总步数(必填,自动计算) |
action_space | gymnasium.Space | 动作空间描述 |
observation_space | gymnasium.Space | 观测空间描述 |
env_spec | str | 环境注册的 JSON 字符串 |
author/author_email | set of str | 作者与邮箱 |
algorithm_name | str | 生成数据所用的专家策略名称 |
minari_version | str | 生成数据集的 Minari 版本 |
requirements | list of str | pip 风格的环境依赖列表 |
code_permalink | str | 生成代码的仓库链接 |
元数据的自动落盘逻辑可参考 minari/dataset/minari_storage.py。
每个 Episode 的奖励统计元数据
每个回合会自动记录一组奖励统计指标,方便你做轨迹筛选(trajectory filtering):
| 指标 | 说明 |
|---|---|
rewards_max/rewards_min | 回合内奖励的最大 / 最小值 |
rewards_mean/rewards_std | 回合奖励的均值 / 标准差 |
rewards_sum | 未折扣的总回报(undiscounted return) |
命名空间元数据(namespace_metadata.json)
每个命名空间目录下的namespace_metadata.json可存放任意 JSON 可序列化信息(如description),用来描述"这个命名空间下的一整组数据集"。读写实现见 get_namespace_metadata()。
支持哪些观测与动作空间?
Minari 存储格式支持 Gymnasium 生态的全部常用空间,保存时序列化为 JSON:
| Space | 用途 |
|---|---|
Box | n 维连续空间,可用上下界约束 |
Discrete | 离散取值{0, 1, ..., n-1} |
MultiDiscrete | 多个离散空间的笛卡尔积 |
MultiBinary | 二值向量空间 |
Tuple/Dict | 组合空间(元组 / 字典结构) |
Text | 有界字符串空间 |
序列化实现在 minari/serialization.py,这也是 Minari 能被 D3RLPy、TorchRL 等框架无缝读取的基础(集成测试见 tests/integrations/)。
实际场景:从 ID 到训练曲线
理解标准后,实际使用只有两步:用 ID 下载 → 用 ID 加载 🎯
minari download D4RL/pen/human-v2import minari dataset = minari.load_dataset("D4RL/pen/human-v2", download=True) episodes = dataset.sample_episodes(10) # 随机采样 10 个回合每个采样到的回合是一个EpisodeData数据类,包含id、observations、actions、rewards、terminations、truncations、infos七个字段(结构定义见 minari/dataset/episode_data.py,API 文档见 docs/api/minari_dataset/episode_data.md)。
Minari 官方教程就用这套流程,仅凭 25 条人类演示训练 IQL 算法完成了 Adroit 机器手转笔任务,训练过程如下:
左:训练损失(Loss)曲线;右:累计奖励(Cumulative reward)曲线——25 条演示就能学到可用的策略,可见高质量离线数据集的价值。
一张表总结核心要点
| 概念 | 核心规则 | 参考位置 |
|---|---|---|
| Dataset ID | (namespace/)(env_name/)dataset_name(-v(version)),name 必填 | minari_dataset.py |
| 本地根目录 | ~/.minari/datasets/,可用MINARI_DATASETS_PATH覆盖 | datasets_root_dir.py |
| 数据文件 | data/目录下,HDF5 或 Arrow 格式 | hdf5_storage.py |
| 全局元数据 | 仅dataset_id/total_episodes/total_steps必填 | minari_storage.py |
| 命名空间元数据 | namespace_metadata.json,任意 JSON 字段 | namespace.py |
掌握以上三部分,你就能看懂、组织并复用任何 Minari 数据集了。完整标准文档请查阅 docs/content/dataset_standards.md,CLI 用法见 docs/content/minari_cli.md 🚀
【免费下载链接】Minari
A standard format for offline reinforcement learning datasets, with popular reference datasets and related utilities
相关推荐
Calibre 格式转换实战指南:把 EPUB 变成任何墨水屏都能打开的格式
Calibre 格式转换实战指南:把 EPUB 变成任何墨水屏都能打开的格式 把一份 EPUB 拖进 Calibre,按一下快捷键,稍等片刻就能拿到 Kindl
桌面应用后端一文读懂 openJiuwen Agent Store:项目目录结构、metadata.json 元数据规范与 community/archived 生命周期
一文读懂 openJiuwen Agent Store:项目目录结构、metadata.json 元数据规范与 community/archived 生命周期
示例工程PaddleSeg 自定义数据集准备与配置实战:目录结构、文件列表生成与 Dataset 配置详解
PaddleSeg 自定义数据集准备与配置实战:目录结构、文件列表生成与 Dataset 配置详解 本文是 PaddleSeg 自定义数据集使用指南,完整覆盖从
人工智能计算机视觉预训练
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考