GEARS 模型的 zip 持久化编解码模块
GEARSStorage
00 Remarks
一个 zip 包内包含五个条目:
manifest.json—— 格式版本、超参配置、模型结构、损失曲线、基线样本索引;prior.csv—— 先验调控网络(文本,便于人工查看与编辑);expression.bin—— 完整表达矩阵(复用BinaryMatrix的网络字节序格式);baseline.bin—— 野生型均值与标准差;model.bin—— 全部可训练参数张量。
图结构不单独落盘:GeneRegulatoryGraph 在给定「基因名列表 + 先验网络 + 表达矩阵 + 共表达配置」时构建结果完全确定,加载时按同样入参重建即可,既省空间也避免图与数据不同步。
注意:BinaryMatrix.Save() 与 BinaryMatrix.LoadStream() 内部都会 dispose 传入的流,而 zip 条目的流本来就必须关闭才会落盘,因此二者语义吻合;但这也意味着 同一个条目只能写一次,不可追加。
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| OpenEntry | 1 | 创建 zip 条目并打开其写入流 |
| ReadTextLines | 1 | 读取 zip 条目的全部文本内容 |
| GetEntry | 1 | 按名称取 zip 条目,不存在时抛出友好异常 |
| WriteManifest | 1 | 写入清单条目 |
| ReadManifest | 1 | 读取并校验清单条目 |
| ReadString | 1 | 从清单字典中读取必填字符串字段 |
| ReadInt | 1 | 从清单字典中读取必填整数字段 |
| JoinNumbers | 2 | 把双精度数组拼成逗号分隔的字符串(固定使用不变文化,避免区域设置影响小数点) |
| ParseDoubles | 1 | 解析逗号分隔的双精度数组 |
| ParseIntegers | 1 | 解析逗号分隔的整数数组 |
| WritePrior | 1 | 写入先验调控网络 |
| ReadPrior | 1 | 读取先验调控网络 |
| WriteExpression | 1 | 写入完整表达矩阵 |
| ReadExpression | 1 | 读取完整表达矩阵 |
| WriteVector | 1 | 写入一个双精度向量(长度 + 数据) |
| ReadVector | 1 | 读取一个双精度向量 |
| WriteTensors | 1 | 写入模型的全部可训练参数张量 |
| ReadTensors | 1 | 读取参数张量并原地写回目标张量 |
03 Fields
| Name | Overloads | Summary |
|---|---|---|
| FormatVersion | 1 | 当前 zip 包格式版本号;加载时不一致会直接报错 |
| EntryManifest | 1 | 条目名:格式版本与超参清单 |
| EntryPrior | 1 | 条目名:先验调控网络 CSV |
| EntryExpression | 1 | 条目名:表达矩阵二进制 |
| EntryBaseline | 1 | 条目名:野生型基线(均值与标准差) |
| EntryModel | 1 | 条目名:模型可训练参数 |
04 Members
ZipArchive, String)创建 zip 条目并打开其写入流
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
entryName | String | 条目名 |
条目的写入流;调用方负责 Using 释放
ZipArchive, String)读取 zip 条目的全部文本内容
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
entryName | String | 条目名 |
文本行数组
ZipArchive, String)按名称取 zip 条目,不存在时抛出友好异常
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
entryName | String | 条目名 |
条目对象
写入清单条目
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
config | GEARSConfig | 超参配置 |
model | GEARSModel | 模型(提供结构信息) |
nGene | Int32 | 基因数量 |
nSample | Int32 | 样本数量 |
lossCurve | Double() | 损失曲线 |
baselineSamples | Int32() | 基线样本列索引 |
nParameters | Int32 | 模型参数张量个数 |
读取并校验清单条目
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
config | GEARSConfig | 返回超参配置 |
lossCurve | Double() | 返回损失曲线 |
baselineSamples | Int32() | 返回基线样本列索引 |
nParameters | Int32 | 返回模型参数张量个数 |
清单字典,便于调用方读取结构字段
Dictionary(Of String, String), String)从清单字典中读取必填字符串字段
| Name | Type | Description |
|---|---|---|
info | Dictionary(Of String, String) | 清单字典 |
key | String | 字段键名 |
字段值
Dictionary(Of String, String), String)从清单字典中读取必填整数字段
| Name | Type | Description |
|---|---|---|
info | Dictionary(Of String, String) | 清单字典 |
key | String | 字段键名 |
字段值
Double())把双精度数组拼成逗号分隔的字符串(固定使用不变文化,避免区域设置影响小数点)
| Name | Type | Description |
|---|---|---|
values | Double() | 数值数组 |
逗号分隔文本;空数组返回空串
Int32())把整数数组拼成逗号分隔的字符串
| Name | Type | Description |
|---|---|---|
values | Int32() | 整数数组 |
逗号分隔文本;空数组返回空串
String)解析逗号分隔的双精度数组
| Name | Type | Description |
|---|---|---|
text | String | 逗号分隔文本 |
双精度数组;文本为空时返回空数组
String)解析逗号分隔的整数数组
| Name | Type | Description |
|---|---|---|
text | String | 逗号分隔文本 |
整数数组;文本为空时返回空数组
ZipArchive, PriorNetwork)写入先验调控网络
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
prior | PriorNetwork | 先验调控网络 |
ZipArchive)读取先验调控网络
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
先验调控网络
ZipArchive, Matrix)写入完整表达矩阵
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
expr | Matrix | 表达矩阵(行=基因,列=样本) |
ZipArchive)读取完整表达矩阵
BinaryMatrix.LoadStream() 内部依赖 Stream.Length 与 Stream.Position 判断数据块是否读完,而 zip 条目的解压流(DeflateStream)不支持取长度, 直接传入会抛 NotSupportedException。因此这里先把条目内容缓冲到 MemoryStream 再解码——这样既复用了既有的二进制格式,又不必改动共享运行时代码。
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
表达矩阵
ZipArchive, String, Double())写入一个双精度向量(长度 + 数据)
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
entryName | String | 条目名 |
x | Double() | 待写入的向量 |
ZipArchive, String)读取一个双精度向量
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
entryName | String | 条目名 |
向量
ZipArchive, List(Of Tensor))写入模型的全部可训练参数张量
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | 目标 zip 归档 |
parameters | List(Of Tensor) | 参数张量列表(顺序即恢复顺序) |
ZipArchive, List(Of Tensor))读取参数张量并原地写回目标张量
| Name | Type | Description |
|---|---|---|
zip | ZipArchive | zip 归档 |
parameters | List(Of Tensor) | 目标张量列表;其个数与每个张量的形状必须与保存时完全一致, 否则抛出 |
当前 zip 包格式版本号;加载时不一致会直接报错
条目名:格式版本与超参清单
条目名:先验调控网络 CSV
条目名:表达矩阵二进制
条目名:野生型基线(均值与标准差)
条目名:模型可训练参数