code: def set_output_shape(self, source_node, IR_node):
      sym_group = self.model.symbol.get_internals()
      for sym in sym_group:
          if source_node.name == sym.name:
              arg_shape, output_shape, aux_shape = sym.infer_shape(
                  data=self.data_shape
              )
              for idx in range(len(output_shape)):
                  output_list = list(output_shape[idx])
  
                  # transpose to channel last
                  if not self.data_format in MXNetParser.channels_last:
                      channel = output_list.pop(1)
                      output_list.append(channel)
  
                  if IR_node.op == "DataInput":
                      MXNetParser._copy_shape(
                          IR_node, [-1] + output_list[1:]
                      )
  
                  shape = graph_pb2.TensorShape()
                  for dim in output_list:
                      new_dim = shape.dim.add()
                      if dim == None:
                          new_dim.size = -1
                      else:
                          new_dim.size = dim
  
                  IR_node.attr["_output_shapes"].list.shape.extend(
                      [shape]
                  )
              break
  
imports: import os
  import sys
  import math
  import mxnet
  import numpy
  from mmdnn.conversion.mxnet.mxnet_graph import MXNetGraph
  import mmdnn.conversion.common.IR.graph_pb2
  from mmdnn.conversion.common.IR.graph_pb2 import NodeDef, GraphDef, DataType
  from mmdnn.conversion.common.DataStructure.parser import Parser
  from mmdnn.conversion.common.utils import *
label_desc: Use image node_id 13 for calling the MXNetParser obj's underlying member method code with example usage: obj.set_output_shape(source_node, IR_node) without return types