class_docstr: Single `Convolution -> BatchNormalization` pass is folded into one `Convolution`.
  
  If there is a `Convolution -> BatchNormalization` pass,
  fold the batch normalization parameters to the kernel
  and bias (if it exists) of the preceding convolution,
  then skip the batch normalization following the convolution.
  
  Supported folding functions: `Convolution`, `Deconvolution`, `Affine`.
class_docstr_tok: ["Single","`","Convolution","-",">","BatchNormalization","`","pass","is","folded","into","one","`","Convolution","`",".","If","there","is","a","`","Convolution","-",">","BatchNormalization","`","pass",",","fold","the","batch","normalization","parameters","to","the","kernel","and","bias","(","if","it","exists",")","of","the","preceding","convolution",",","then","skip","the","batch","normalization","following","the","convolution",".","Supported","folding","functions",":","`","Convolution","`",",","`","Deconvolution","`",",","`","Affine","`","."]
code: def modify(self, f, inputs):
      outputs = f.outputs[0]
  
      # Not end
      if len(outputs.function_references) == 0:
          return
  
      # Function is BN whose previous function is an inner-prod layer
      if (
          f.info.type_name == "BatchNormalization"
          and inputs[0].parent.info.type_name in self._fct_set
      ):
          return inputs[0]
  
      # Next func is not BatchNorm
      next_func = outputs.function_references[0]
      if next_func.info.type_name != "BatchNormalization":
          return
  
      # Variable is not forked
      if len(f.outputs[0].function_references) != 1:
          return
  
      # Function is inner-product layer
      if not f.info.type_name in self._fct_set:
          return
  
      ip_func = f
      bn_func = next_func
      w_data, b_data = self._compute_folded_parameters(ip_func, bn_func)
  
      x = inputs[0]
  
      scope = self.get_parameter_scope(inputs[1])
      with nn.parameter_scope(scope):
          w = get_parameter_or_create(
              "w-folded", inputs[1].shape, w_data, inputs[1].need_grad
          )
          b = get_parameter_or_create(
              "b-folded", inputs[2].shape, b_data, inputs[2].need_grad
          )
  
      h = self.connect(f, x, w, b)
  
      return h
  
imports: import nnabla
  import nnabla.functions
  import numpy
  from nnabla.initializer import ConstantInitializer
  from nnabla.parameter import get_parameter_or_create
  from .graph_converter import FunctionModifier
label_desc: Use image node_id 2 for calling the BatchNormalizationFoldingModifierInner obj's underlying member method code with example usage: obj.modify(f, inputs) and returns: h, inputs