ONNX (.onnx)
背景
-
- 神经网络模型的开源格式.
- 存储模型和各种元数据.
- ONNX 是 Open Neural Network Exchange(开放式神经网络交换)的缩写.
- 基于 Protobuf 的二进制文件
- 由 Microsoft 和 Facebook 于 2017 年首次发布.
Import 与 Export
- Import["file.onnx"] 导入指定文件中的存储的网络,将其返回为 NetChain,NetGraph 或类似构造.
- Import["file.onnx",elem] 导入指定参数 elem.
- 导入格式可以用 Import["file","ONNX"] 或 Import["file",{"ONNX",elem,…}] 指定.
- Export["file.onnx",net] 将 net 导出为 ONNX 模型.
- 支持一下表达式:
-
NetChain[…] 表示为层链的网络 NetGraph[…] 表示为层图的网络 layer 任何网络层,例如 LinearLayer, ... - 请到以下参考页面了解完整的基本信息:
-
Import, Export 从文件导入或导出到文件 CloudImport, CloudExport 从云对象导入或导出到云对象 ImportString, ExportString 从字符串导入或导出到字符串 ImportByteArray, ExportByteArray 从字节数组导入或导出到字节数组
Import 参数
- Import 通用参数:
-
"Elements" 该文件可用的参数和选项列表 "Summary" 文件摘要 "Rules" 所有可用参数的规则列表 - Import 参数包括:
-
"ArrayAssociation" 以关联形式导入参数 "ArrayList" 以列表形式导入参数 "Description" 每个序列基因座描述文本 "ONNXGraph" 网络的 ONNX 表示 "ModelDomain" 模型的命名空间或域名 "ModelVersion" 模型的整数版本数 "Net" 网络的 Wolfram 语言表示,包括所有初始数组(默认) "NetExternalObject" 网络的 NetExternalObject 表示 "IRVersion" 模型使用的 ONNX 中间表示版本 "OperatorSetVersion" 运算符集模型兼容 "ProducerName" 用于生成模型的工具的名称 "ProducerVersion" 生成工具的版本 "RawData" 该文件的完整和未处理内容,其中包括图形表示和所有元数据 "UninitializedNet" 网络的 Wolfram 语言表示形式,不包含任何数组
选项
- Import 选项:
-
"Arrays" None 包含网络附加数组的有效 ONNX 张量原型文件的路径或路径列表 - Export 选项:
-
"Description" None ONNX 元数据中的模型文档字符串 "ExternalArrays" Automatic 将网络数组导出到不同的文件中 "GraphName" Automatic ONNX 元数据中的图形名称 "ModelVersion" 0 ONNX 元数据中的模型版本 "OperatorSetVersion" Automatic 模型使用的标准 ONNX 运算符集的版本 - 选项 "ExternalArrays" 可被设为以下内容:
-
Automatic 根据模型大小为网络数组创建外部文件 None 在模型文件中包括网络数组 All 将网络数组导出到不同的文件中,每个数组一个文件 "Single" 将所有网络数组导出到一个文件中 - 当模型大小小于 2GB 时,将 "ExternalArrays" 设为 Automaticis 相当于 None,当大于 2GB 时相当于 "Single". 当设为 All 和 "Single" 时,在主模型文件的同一目录中创建数组文件. 任何 ONNX 导入程序都希望此类文件位于相同的相对路径上.
范例
打开所有单元关闭所有单元基本范例 (2)
导入参数 (14)
NetExternalObject (1)
将 ONNX 模型导入为 NetExternalObject:
导出选项 (5)
"ExternalArrays" (1)
"OperatorSetVersion" (1)
创建一个 PaddingLayer,并将其导出到运算符集 10 中:
在运算符集 10 中,ONNX "Pad" 算符接受一个输入,其填充大小和值为静态属性:
可以把模型文件转换回来,因为 Import 支持运算符集 10:
在运算符集 11 中,"Pad" 算符的填充大小和值从属性移至输入. 该算符现在有两个额外的输入,并少了两个属性:
可以把模型文件转换回来,因为 Import 支持运算符集 11:
可能出现的问题 (1)
任何 NetEncoder 或 NetDecoder 会自动被 Export 移除,ONNX 对其不支持. 创建一个 NetEncoder 和 NetDecoder 的网络并将其导出:
将模型导回表明 NetEncoder 或 NetDecoder 不存在: