Graph

class onnx_ir.Graph(inputs, outputs, *, nodes, initializers=(), doc_string=None, opset_imports=None, name=None, metadata_props=None)

IR 图。

Graph 表示一个计算图。除了 ONNX 规范中指定的字段外,它还包含 opset_imports 的映射。这允许不同的子图导入不同的 opset。协调不同的 opset 是反序列化器的责任。

节点不保证按拓扑排序。但迭代顺序在不同运行之间应该是确定的。用户有责任维护节点的拓扑顺序。

请注意,Graph 中没有 node 属性。Graph 可以被视为一个节点序列,并应如此使用。例如,要将所有节点获取为列表,请调用 list(graph)

0.1.1 版中已更改: 具有非 None 生产者的值将被拒绝作为图输入或初始化器。

0.1.1 版中新增: 为初始化器和属性添加了 add 方法。

参数:
  • inputs (Sequence[Value])

  • outputs (Sequence[Value])

  • nodes (Iterable[Node])

  • initializers (Sequence[Value])

  • doc_string (str | None)

  • opset_imports (dict[str, int] | None)

  • name (str | None)

  • metadata_props (dict[str, str] | None)

name

图的名称。

inputs

图的输入值。

outputs

图的输出值。

initializers

图中的初始化器。

doc_string

文档字符串。

opset_imports

图导入的 Opset。

metadata_props

将序列化到 ONNX 文件中的元数据。

meta

用于图转换传递的元数据存储。

name
all_nodes()[source]

在 O(#nodes + #attributes) 时间内获取图中及其子图中的所有节点。

这是 onnx_ir.traversal.RecursiveGraphIterator(graph) 的别名。对于更高级的节点遍历,请考虑使用 onnx_ir.traversal.RecursiveGraphIterator

0.1.2 版本新增。

返回类型:

Iterator[Node]

append(node, /)[source]

在 O(1) 时间内将节点附加到图中。

如果任何名称为 None,则会为节点及其值分配唯一的名称。

参数:

node (Node) – 要附加的节点。

引发:

ValueError – 如果节点属于另一个图。

返回类型:

count(value) integer -- return number of occurrences of value
display(*, page=False)

漂亮地打印对象。

参数:

page (bool) – 是否分页输出。

返回类型:

property doc_string: str | None
extend(nodes, /)[source]

在 O(#new_nodes) 时间内使用给定节点扩展图。

如果任何名称为 None,则会为节点及其值分配唯一的名称。

参数:

nodes (Iterable[Node]) – 用于扩展图的节点。

引发:

ValueError – 如果任何节点属于另一个图。

返回类型:

index(value[, start[, stop]]) integer -- return first index of value.

如果值不存在,则引发 ValueError。

支持 start 和 stop 参数是可选的,但建议使用。

property initializers: GraphInitializers

图的初始化器,为 dict[str, Value] 类型。

键是初始化器的名称。值是 Value 对象。

此属性还支持 add 方法,该方法接受一个 Value 并将其添加到初始化器中(如果尚不存在)。

注意

当使用 graph.initializers[key] = value 设置初始化器时,如果值没有名称,它将被分配 key 作为其名称。

property inputs: MutableSequence[Value]
insert_after(node, new_nodes, /)[source]

在 O(#new_nodes) 时间内,在给定节点之后插入新节点。

如果任何名称为 None,则会为节点及其值分配唯一的名称。

参数:
  • node (Node) – 要在其后插入的节点。

  • new_nodes (Iterable[Node] | Node) – 要插入的新节点。

引发:

ValueError – 如果任何节点属于另一个图。

返回类型:

insert_before(node, new_nodes, /)[source]

在 O(#new_nodes) 时间内,在给定节点之前插入新节点。

如果任何名称为 None,则会为节点及其值分配唯一的名称。

参数:
  • node (Node) – 要在其之前插入的节点。

  • new_nodes (Iterable[Node] | Node) – 要插入的新节点。

引发:

ValueError – 如果任何节点属于另一个图。

返回类型:

property meta: MetadataStore

用于中间分析的元数据存储。

如果要将元数据序列化到 ONNX proto,请写入 metadata_props

property metadata_props: dict[str, str]

图的元数据属性。

元数据属性用于存储有关图的额外信息。与 meta 不同,此属性被序列化到 ONNX proto。

node(index_or_name, /)[source]

按索引或名称获取节点。

这是一个 O(n) 操作。获取图两端(0 或 -1)的节点是 O(1)。

注意

如果需要重复随机访问,请考虑使用 list(graph) 将其转换为列表。或者对于按名称重复访问,转换为字典:{node.name for node in graph}

当提供名称并且存在多个同名节点时,返回第一个同名节点。

参数:

index_or_name (int | str) – 节点的索引或名称。

返回:

如果找到,则为节点。

引发:
  • IndexError – 如果索引超出范围。

  • ValueError – 如果未找到具有给定名称的节点。

返回类型:

Node

num_nodes()[source]

在 O(1) 时间内获取图中的节点数量。

请注意,此方法返回此图直接包含的节点数量。它不计算子图中的节点。

这是 len(graph) 的别名。如果您喜欢更具描述性的名称以提高可读性,请使用此方法。

返回类型:

int

property opset_imports: dict[str, int]
property outputs: MutableSequence[Value]
register_initializer(value)[source]

向图注册初始化器。

这是一个方便的方法,用于通过检查向图注册初始化器。

参数:

value (Value) – 要注册为图初始化器的 Value。它必须设置 .const_value

引发:
  • ValueError – 如果已注册同名但不是此值的值。

  • ValueError – 如果值没有名称。

  • ValueError – 如果初始化器是由节点生成的。

  • ValueError – 如果值没有设置 .const_value

返回类型:

remove(nodes, /, safe=False)[source]

在 O(#要移除的节点数) 时间内从图中移除节点。

如果发生任何错误,为确保图不会处于不一致状态,图不会被修改。

参数:
  • nodes (Node | Iterable[Node]) – 要移除的节点。

  • safe (bool) –

    如果为 True,则在移除前执行以下操作

    1. 检查以确保要移除的节点在移除前没有用户。2. 检查节点是否对任何图输出有贡献。3. 移除对所有输入的引用,使其不再是其他节点的用户。

引发:
  • ValueError – 如果要移除的任何节点不属于此图。

  • ValueError – (当 safe=True 时) 如果节点不属于此图或节点有用户。

  • ValueError – (当 safe=True 时) 如果节点仍被其他未移除的节点使用。

返回类型:

sort()[source]

在 O(#nodes + #values) 时间内对此图和所有子图执行拓扑排序。

此排序是稳定的。它尽可能地保留原始顺序。

参考:https://github.com/madelson/MedallionTopologicalSort#stable-sort

引发:

ValueError – 如果图包含循环,导致无法进行拓扑排序。

返回类型:

subgraphs()[source]

在 O(#nodes + #attributes) 时间内获取图中的所有子图。

0.1.2 版本新增。

返回类型:

Iterator[Graph]