Protos

这些结构是使用 protobuf 在 onnx/*.proto 文件中定义的。建议使用模块 onnx.helper 中的函数来创建它们,而不是直接实例化。每个结构都可以用函数 print 打印,并会以 json 字符串的形式呈现。

AttributeProto

这个类用于定义由 NodeProto 本身定义的算子的属性。它是一个命名的属性,包含单个浮点、整数、字符串、图和张量值,或重复的浮点、整数、字符串、图和张量值。一个 AttributeProto 必须包含 name 字段,并且 *只能包含* 以下内容字段中的一个,从而有效强制实现与 C/C++ 联合体等效的效果。

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 是一个顶层的文件/容器格式,用于捆绑一个机器学习模型并将其计算图与元数据关联起来。模型的语义由相关的 GraphProto 描述。

class onnx.ModelProto

NodeProto

这定义了一个算子。模型是数学函数的组合,每个函数都表示为一个 onnx 算子,存储在 NodeProto 中。计算图由节点的有向无环图(DAG)组成,这些节点代表了机器学习框架中通常所说的*层*或*流水线阶段*。例如,它可以是一个类型为*Conv*的节点,接收一个图像、一个滤波器张量和一个偏置张量,并产生卷积输出。

class onnx.NodeProto

OperatorProto

这个类很少被用户使用。OperatorProto 代表了算子签名和语义的不可变规范。算子被声明为 OperatorSet 的一部分,该集合也定义了该集合的域名。算子由一个三部分标识符(domain、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)是一个单调递增的整数,表示算子集成员的变化。算子集由一个两部分标识符(domain, 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]> 意味着它们可以有不同的形状(都是秩为 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 中列出。

class onnx.TensorProto
class Segment

TensorShapeProto

这定义了张量或稀疏张量的形状。它是一个维度列表。维度可以是一个整数值或一个符号变量。符号变量表示一个未知的维度。

class onnx.TensorShapeProto
class Dimension

TrainingInfoProto

TrainingInfoProto 存储用于训练模型的信息。具体来说,它定义了两个功能:一个初始化步骤和一个训练算法步骤。初始化将模型重置回其原始状态,就好像没有进行过训练一样。训练算法根据输入数据改进模型。初始化步骤的语义是,ModelProto.graph 和 TrainingInfoProto.algorithm 中的初始化器首先按照图中初始化器的规定进行初始化,然后由 ModelProto.training_info 中每个实例的 *initialization_binding* 进行更新。字段 *algorithm* 定义了一个计算图,它代表了训练算法的一个步骤。在执行 TrainingInfoProto.algorithm 之后,由 *update_binding* 指定的初始化器可能会立即被更新。如果目标训练算法包含连续的更新步骤(例如块坐标下降法),用户需要为每个步骤创建一个 TrainingInfoProto。

class onnx.TrainingInfoProto

TypeProto

这定义了一个张量的类型,它由一个元素类型和一个形状(ShapeProto)组成。

class onnx.TypeProto
class Map
class Opaque
class Optional
class Sequence
class SparseTensor
class Tensor

ValueInfoProto

这定义了 GraphProto 的输入或输出类型。它包含一个名称、一个类型(TypeProto)和一个文档字符串。

class onnx.ValueInfoProto