onnx.tools

网络绘图器

onnx.tools.net_drawer.GetPydotGraph(graph: GraphProto, name: str | None = None, rankdir: str = 'LR', node_producer: Callable[[NodeProto, int], Node] | None = None, embed_docstring: bool = False) Dot[源代码]
onnx.tools.net_drawer.GetOpNodeProducer(embed_docstring: bool = False, **kwargs: Any) Callable[[NodeProto, int], Node][来源]
from onnx.tools.net_drawer import GetPydotGraph, GetOpNodeProducer

pydot_graph = GetPydotGraph(
    model_onnx.graph,  # model_onnx is a ModelProto instance
    name=model_onnx.graph.name,
    rankdir="TP",
    node_producer=GetOpNodeProducer("docstring"))
pydot_graph.write_dot("graph.dot")

更新输入输出维度

onnx.tools.update_model_dims.update_inputs_outputs_dims(model: ModelProto, input_dims: dict[str, list[Any]], output_dims: dict[str, list[Any]]) ModelProto[源代码]

此函数将模型输入和输出的维度大小更新为input_dims和output_dims中提供的值。如果提供的dim值为负数,将为该维度设置一个唯一的dim_param。

示例。如果我们有以下输入和输出的形状:

  • 形状(input_1) = (‘b’, 3, ‘w’, ‘h’)

  • 形状(input_2) = (‘b’, 4)

  • 形状(输出) = (‘b’, ‘d’, 5)

参数可以如下提供:

input_dims = {
    "input_1": ['b', 3, 'w', 'h'],
    "input_2": ['b', 4],
}
output_dims = {
    "output": ['b', -1, 5]
}

综合起来:

model = onnx.load('model.onnx')
updated_model = update_inputs_outputs_dims(model, input_dims, output_dims)
onnx.save(updated_model, 'model.onnx')

用形状常量替换初始化器

onnx.tools.replace_constants.replace_initializer_by_constant_of_shape(onx: FunctionProto | GraphProto | ModelProto, threshold: int = 128, ir_version: int | None = None, use_range: bool = False, value_constant_of_shape: float = 0.5)[source]

通过节点ConstantOfShape替换初始化器或常量节点以减少大小。

这降低了编写关于特定图结构的单元测试的成本。

Parameters:
  • onx – 模型协议

  • threshold – 低于此阈值的每个初始化器不受影响

  • ir_version – 必须将初始值设定项指定为输入,适用于 ir_version <= 3,如果onx是 FunctionProtoGraphProto,则必须指定此初始值设定项

  • use_range – 如果使用操作符 Range 而不是 ConstantOfShape 来避免常量张量

  • value_constant_of_shape – 用作所有节点值的值 ConstantOfShape,高值可能会产生 nan 或 inf 预测

Returns:

onx,修改后的ModelProto

该函数的设计使得可以在修改后的模型上重新应用该函数,并且可以替换ConstantOfShapeRange操作符,或者替换每个ConstantOfShape的填充值。