Protos¶
这些结构使用 protobuf 在文件 onnx/*.proto
中定义。建议使用模块 onnx.helper 中的函数来创建它们,而不是直接实例化。每个结构都可以使用函数 print
打印,并渲染为 JSON 字符串。
AttributeProto¶
此类用于定义一个由 NodeProto 定义的算子属性。它是一个命名属性,包含单个浮点数、整数、字符串、图和张量值,或重复的浮点数、整数、字符串、图和张量值。AttributeProto 必须包含 name 字段,并且只能包含以下内容字段中的一个,有效地强制实现了 C/C++ union 的等价功能。
- class onnx.AttributeProto¶
FunctionProto¶
这定义了一个函数。它不是模型,但可用于定义模型中使用的自定义算子。
- class onnx.FunctionProto¶
GraphProto¶
这定义了一个图,或例如从循环或测试中调用的一组节点。图定义了模型的计算逻辑,由基于输入和输出形成有向无环图的参数化节点列表组成。这等同于许多深度学习框架中的网络或图。
- class onnx.GraphProto¶
MapProto¶
这定义了一个映射或字典。它指定了一个由键和值定义的关联表。MapProto 由重复的键字段(类型为 INT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64 或 STRING)和值字段(类型为 TENSOR、SPARSE_TENSOR、SEQUENCE 或 MAP)组成。在 MapProto 的整个实例化过程中,键类型和值类型必须保持一致。
- class onnx.MapProto¶
ModelProto¶
这定义了一个模型。这是每个转换库在转换机器学习模型后返回的类型。ModelProto 是一种顶级文件/容器格式,用于捆绑 ML 模型并将其计算图与元数据相关联。模型的语义由关联的 GraphProto 描述。
- class onnx.ModelProto¶
NodeProto¶
这定义了一个算子。模型是数学函数的组合,每个函数都表示为 ONNX 算子,存储在 NodeProto 中。计算图由节点的有向无环图(DAG)组成,这些节点代表了机器学习框架中通常称为层或管线阶段的内容。例如,它可以是一个 Conv 类型的节点,接收图像、滤波器张量和偏置张量作为输入,并产生卷积输出。
- class onnx.NodeProto¶
OperatorProto¶
此类用户很少使用。OperatorProto 表示算子签名和语义的不可变规范。算子被声明为 OperatorSet 的一部分,OperatorSet 也定义了该集合的域名称。算子由一个三部分标识符(域、op_type、since_version)唯一标识,其中
domain 是包含此算子规范的算子集合的域。
op_type 是 NodeProto.op_type 引用的算子名称
since_version 是首次声明此算子的算子集合版本。
- class onnx.OperatorProto¶
OperatorSetIdProto¶
这是 ModelProto 类中属性 opset_import
的类型。此属性指定模型中使用的算子版本。每个算子或节点都属于一个域。同一域的所有算子共享相同的版本。
- class onnx.OperatorSetIdProto¶
OperatorSetProto¶
OperatorSetProto 表示一组不可变的算子规范集合。该集合的域 (OperatorSetProto.domain) 是一个反向 DNS 名称,用于区分独立实体定义的算子集。该集合的版本 (opset_version) 是一个单调递增的整数,表示算子集成员资格的变化。算子集由一个两部分标识符(域,opset_version)唯一标识。与 ModelProto 类似,OperatorSetProto 旨在作为顶级文件/线格式,因此除了算子集信息外,还包含标准格式头。
- class onnx.OperatorSetProto¶
OptionalProto¶
模型的某些输入或输出是可选的。在这种情况下必须使用此类。OptionalProto 类的一个实例可以包含或不包含 TensorProto、SparseTensorProto、SequenceProto、MapProto 和 OptionalProto 类型的实例。
- class onnx.OptionalProto¶
SequenceProto¶
这定义了一个密集、有序、由同质类型元素组成的集合。序列可以由张量、映射或序列组成。如果序列由张量组成,则张量必须具有相同的元素类型(即 int32)。在某些情况下,序列中的张量可以具有不同的形状。张量是否可以具有不同的形状取决于与相应 ValueInfo
关联的类型/形状。例如,Sequence<Tensor<float, [M,N]>>
意味着所有张量都具有相同的形状。然而,Sequence<Tensor<float, [omitted,omitted]>>
意味着它们可以具有不同的形状(均为 rank 2),其中omitted表示相应维度没有符号/常量值。最后,Sequence<Tensor<float, omitted>>
意味着不同的张量可以具有不同的秩,前提是张量类型本身省略了shape。更完整的描述请参考 静态张量形状。
- class onnx.SequenceProto¶
SparseTensorProto¶
这定义了一个稀疏张量。非默认值的序列被编码为一个形状为 [NNZ]
的张量。数值张量的默认值为零,字符串张量的默认值为控字符串。values 必须存在非空名称,该名称在 sparse_initializer 列表中用作 SparseTensorProto 的名称。
- class onnx.SparseTensorProto¶
StringStringEntryProto¶
这等同于一对字符串。它用于在 ModelProto 中存储元数据。
- class onnx.StringStringEntryProto¶
TensorProto¶
这定义了一个张量。张量由形状(见 ShapeProto)、元素类型(见 TypeProto)和元素本身完全描述。所有可用类型列在 l-mod-onnx-mapping 中。
TensorShapeProto¶
这定义了张量或稀疏张量的形状。它是一个维度列表。维度可以是整数值或符号变量。符号变量表示未知维度。
TrainingInfoProto¶
TrainingInfoProto 存储用于训练模型的信息。特别是,它定义了两个功能:初始化步骤和训练算法步骤。初始化将模型重置回其原始状态,如同未进行训练一样。训练算法基于输入数据改进模型。初始化步骤的语义是,首先按照图中 initializers 的指定初始化 ModelProto.graph 和 TrainingInfoProto.algorithm 中的 initializers,然后由 ModelProto.training_info 中每个实例的initialization_binding进行更新。字段algorithm定义了一个计算图,表示训练算法的一个步骤。执行 TrainingInfoProto.algorithm 后,由update_binding指定的 initializers 可能会立即更新。如果目标训练算法包含连续的更新步骤(例如块坐标下降法),用户需要为每个步骤创建一个 TrainingInfoProto。
- class onnx.TrainingInfoProto¶
TypeProto¶
这定义了张量的类型,它由元素类型和形状(ShapeProto)组成。
ValueInfoProto¶
这定义了 GraphProto 的输入或输出类型。它包含名称、类型 (TypeProto) 和文档字符串。
- class onnx.ValueInfoProto¶