Protos

这些结构在文件onnx/*.proto中使用protobuf定义。建议使用模块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是用于捆绑ML模型并将其计算图与元数据关联的顶级文件/容器格式。模型的语义由关联的GraphProto描述。

class onnx.ModelProto

NodeProto

这定义了一个操作符。模型是数学函数的组合,每个函数都表示为一个onnx操作符,存储在NodeProto中。计算图由节点的DAG组成,这些节点表示机器学习框架中通常称为管道阶段的内容。例如,它可以是类型为Conv的节点,它接收图像、过滤器张量和偏差张量,并生成卷积输出。

class onnx.NodeProto

OperatorProto

此类很少被用户使用。OperatorProto表示操作符签名和语义的不可变规范。操作符被声明为OperatorSet的一部分,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)和元素本身完整描述。所有可用类型都列在 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