Skip to content

Release v1.7.0: Dataset类

Choose a tag to compare

@EthanPeng-2048 EthanPeng-2048 released this 05 Oct 12:57
· 175 commits to main since this release

neuralnet.cpp v1.7.0 Release Notes

发布范围:v1.6.1(384c58b,2026-10-04)→ v1.7.0;内容提交截至 f7b6bf7(2026-10-06),其后仅含本发布文档与版本同步提交。
提交量:6 content commits,114 files changed,+6090 / −3150(含测试、文档与 Python 侧同步)。
主题:统一数据集——.nndataset / .nnvocab / KVRecord v2 格式统一 + 只读类 nn::Dataset + 生成/转换工具 dataset_gen / dataset_convert,text_train 只吃数据集、模型格式 v6 内嵌词表 kvrec;同批交付错误处理宏族(NN_TRY/NN_CHECK/NN_EXIT/NN_FAIL);ctest 24 → 27。设计与逐条裁决见 19-unified-dataset.md。
兼容性:有破坏性变更(CLI 参数、词表文件格式、.tokcache 移除,见 §6 迁移指南);模型文件 v1–v5 零破坏(v5 及以下仍读其内嵌 JSON 词表);引擎 / Layer / Tensor 接口无变更(ComputeEngine virtual 仍 49)。另含 load_tokenizer_from_file 签名变更(API 级,见 §6.3)。

亮点速览(TL;DR)

方向 变化 收益
数据格式 六条互不相通的读取路径(MNIST CSV×2 / txt 直读 / .tokcache / JSON 词表 / .nnpkg)收敛为 .nndataset(数据)+ .nnvocab(词表),底层统一 KVRecord v2 新接数据集 = 跑一次 dataset_gen,零新代码;词表/语料/掩码/缓存四个概念合一
KVRecord v2 字段只记 key / 类型 / 文件绝对地址,值走数据块;Type::Record 层层嵌套;哨兵自举 v1/v2 分派 大值(词表 blob、doc 块)零拷贝寻址;数据块地址连续性校验 = 整体搬迁硬报错;模型 spec 头仍 v1 字节零变化
生成期语义 tokenize、loss 掩码(all/assistant)、test 子集、来源 sha256、license 全部在生成期定好并嵌入数据集 text_train 删 4 个选项与全部数据加载代码;"数据集自带语义",不再训练期重扫
统一类 新 nn::Dataset(只读:嗅探标签分派 .nndataset/.nnvocab);load_text() 输出与旧 tokcache 产物逐位同构 下游"拼流 → 滑窗 → 训练"一行不改;§8 逐位一致有回归锁
模型格式 v6 内嵌词表改 .nnvocab kvrec(v5 及以下仍读内嵌 JSON,按版本分派) 词表二进制自描述;旧模型零破坏、无需转换工具
错误处理 手写 auto r = f(); if (!r) … 三形态收敛为宏族 NN_TRY/NN_CHECK/NN_EXIT + NN_FAIL;全仓迁移 + 门禁基线 0 L2 层 −约 500 处样板;错误风格一处可查(core_errors.hpp)
测试 ctest 24 → 27:kvrec_test / nnvocab_test / dataset_test KVRecord v2、词表往返、数据集逐位一致全部进常驻口径