MXNet (.json, .params)

背景

    • Wolfram 语言使用的 MXNet 深度学习框架的根本格式.
    • MXNet 网络被保存为两个单独的文件: 一个指定网络拓扑的 .json 文件和一个指定笔记本中使用的数值数组的 .params 文件. 当加载 .json 文件时,Wolfram 语言会自动查找合适的 .params 文件.

Import 和 Export

  • Import["file.json","MXNet"] 导入存为 .json 文件的 MXNet 网络,如果有的话,会从对应的 .params 文件加载权重.
  • 对应于 "file.json" 的参数文件被假设为匹配模式 "file*.params" 并位于同样的文件夹中.
  • Import["file.params","MXNet"] 也可用于直接导入网络参数.
  • Import["file.json",{"MXNet",elem}]Import["file.params",{"MXNet",elem}] 从对应文件导入指定参数 elem.
  • 默认情况下,Import["file.json"] 导入为 "JSON" 格式,而非 "MXNet".
  • 请到以下参考页面了解完整的基本信息:
  • Import, Export从文件导入或导出到文件
    CloudImport, CloudExport从云对象导入或导出到云对象
    ImportString, ExportString从字符串导入或导出到字符串
    ImportByteArray, ExportByteArray从字节数组导入或导出到字节数组

Import 参数

  • Import 的通用参数:
  • "Elements" 该文件可用的参数和选项列表
    "Summary"文件摘要
    "Rules"所有可用参数的规则列表
  • 当导入 .json 文件时,可用网络 Import 参数:
  • "InputNames"网络输入的名称
    "NetExternalObject"将网络导入为 NetExternalObject
    "NodeDataset"MXNet 符号结点的数据集
    "NodeGraph"MXNet 符号的结点图形
    "NodeGraphPlot"MXNet 符号的结点绘图
  • Import["file.json","MXNet"] 默认使用 "Net" 参数.
  • 当导入 .params 文件时,可用参数 Import 参数:
  • "ArrayAssociation"以关联形式导入参数
    "ArrayList"以列表形式导入参数
    "ArrayNames"参数数组的名称
  • Import["file.params","MXNet"] 默认使用 "ArrayAssociation" 参数.

选项

  • Import 选项:
  • "ArrayPath"Automatic到 MXNet 参数文件的路径
  • Export 选项:
  • "ArrayPath"Automatic保存参数数组的路径
    "SaveArrays"True是否导出网络参数数组

范例

打开所有单元关闭所有单元

基本范例  (1)

定义 NetChain

把网络导出为 MXNet 格式:

从 MXNet 格式中导入网络:

Import 参数  (9)

InputNames  (1)

获取给定 MXNet 网络的网络输入列表:

NetExternalObject  (2)

NetExternalObject 形式导入 MXNet 网络:

这等价于如下:

如果 MXNet 网络有一个同名的参数文件,会被自动导入:

"ArrayPath" 选项可被用于避免导入参数文件,这等同于生成未初始化的网络:

请注意,生成的 NetExternalObject 具有额外的输入,其中必须提供缺失数组的值.

NodeDataset  (1)

观察 MXNet 符号的结点:

NodeGraph  (1)

获取 MXNet 符号中的结点图:

获取图中顶点列表:

NodeGraphPlot  (1)

获取 MXNet 符号中的结点图:

ArrayAssociation  (1)

以关联形式导入 MXNet 网络中的数组:

这等同于显式指定到参数文件的路径:

ArrayList  (1)

以列表形式导入 MXNet 网络中的数组:

ArrayNames  (1)

获取 MXNet 网络的数组名称:

这等同于:

导入选项  (1)

"ArrayPath"  (1)

"ArrayPath" 允许指明到参数文件的显式路径:

当设置为 None 时,不导入参数,等同于生成未初始化网络:

请注意,生成的 NetExternalObject 具有额外的输入,其中必须提供缺失数组的值.

可能存在的问题  (4)

MXNet 模型定义不保留输入与输出维度的信息. 定义一个带有指定 "Input"维度的 NetChain

导出网络为 MXNet 格式:

导入时候必须提供输入的尺寸, 否则过程将失败:

提供不一致的尺寸将导致 MXNet 的形状推断错误:

必须提供一组最小的一致维度. 在这种情况下,为单个输入提供形状就足以推断网络的其余部分:

包含转换为作用于批量元素的 MXNet 运算符的层的网络在往返时需要额外的输入维度. 创建一个小型卷积网络:

将网络导出为 MXNet 格式:

为原始网络提供相同输入形状将导致 MXNet 错误:

必须明确提供额外的输入尺寸,即批处理维度。它通常可以有任何值:

任何添加于网络的 NetEncoderNetDecoder 将不会被导出:

所导入的 NetExternalObject 不再含有 NetEncoder

无法导出对可变长度序列进行操作的循环层:

修改序列长度后能够导入网络: