コード例 #1
0
ファイル: dump_ort_model.py プロジェクト: xkszltl/onnxruntime
    def _dump_graph(self, graph: fbs.Graph):
        '''
        Process one level of the Graph, descending into any subgraphs when they are found
        '''

        self._dump_initializers(graph)
        self._dump_nodeargs(graph)
        print('Nodes:')
        for i in range(0, graph.NodesLength()):
            node = graph.Nodes(i)
            self._dump_node(node)

            # Read all the attributes
            for j in range(0, node.AttributesLength()):
                attr = node.Attributes(j)
                attr_type = attr.Type()
                if attr_type == fbs.AttributeType.AttributeType.GRAPH:
                    print(
                        f'## Subgraph for {node.OpType().decode()}.{attr.Name().decode()} ##'
                    )
                    self._dump_graph(attr.G())
                    print(
                        f'## End {node.OpType().decode()}.{attr.Name().decode()} Subgraph ##'
                    )
                elif attr_type == fbs.AttributeType.AttributeType.GRAPHS:
                    # the ONNX spec doesn't currently define any operators that have multiple graphs in an attribute
                    # so entering this 'elif' isn't currently possible
                    print(
                        f'## Subgraphs for {node.OpType().decode()}.{attr.Name().decode()} ##'
                    )
                    for k in range(0, attr.GraphsLength()):
                        print(f'## Subgraph {k} ##')
                        self._dump_graph(attr.Graphs(k))
                        print(f'## End Subgraph {k} ##')
コード例 #2
0
    def _process_graph(self, graph: fbs.Graph,
                       outer_scope_value_typeinfo: dict):
        '''
        Process one level of the Graph, descending into any subgraphs when they are found
        :param outer_scope_value_typeinfo: Outer scope NodeArg dictionary from ancestor graphs
        '''
        # Merge the TypeInfo for all values in this level of the graph with the outer scope value TypeInfo.
        value_name_to_typeinfo = OrtFormatModelProcessor._setup_type_info(
            graph, outer_scope_value_typeinfo)

        for i in range(0, graph.NodesLength()):
            node = graph.Nodes(i)

            optype = node.OpType().decode()
            domain = node.Domain().decode(
            ) or 'ai.onnx'  # empty domain defaults to ai.onnx

            self._add_required_op(domain, node.SinceVersion(), optype)

            if self._op_type_processors:
                self._op_type_processors.process_node(node,
                                                      value_name_to_typeinfo)

            # Read all the attributes
            for j in range(0, node.AttributesLength()):
                attr = node.Attributes(j)
                attr_type = attr.Type()
                if attr_type == fbs.AttributeType.AttributeType.GRAPH:
                    self._process_graph(attr.G(), value_name_to_typeinfo)
                elif attr_type == fbs.AttributeType.AttributeType.GRAPHS:
                    # the ONNX spec doesn't currently define any operators that have multiple graphs in an attribute
                    # so entering this 'elif' isn't currently possible
                    for k in range(0, attr.GraphsLength()):
                        self._process_graph(attr.Graphs(k),
                                            value_name_to_typeinfo)