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","`","."]
docstr:                         Weight layout
  conv(channel_first)     o,i,k1,k2,...kn
  conv(channel_last)      o,k1,k2,...,kn,i
  deconv(channel_first)   i,o,k1,k2,...,kn
  deconv(channel_last)    i,k1,k2,...,kn,o
docstr_tok: ["Weight","layout","conv","(","channel_first",")","o",",","i",",","k1",",","k2",",","...","kn","conv","(","channel_last",")","o",",","k1",",","k2",",","...",",","kn",",","i","deconv","(","channel_first",")","i",",","o",",","k1",",","k2",",","...",",","kn","deconv","(","channel_last",")","i",",","k1",",","k2",",","...",",","kn",",","o"]
code: def reshape_bn_parameters(self, ip_func, bn_parameters, channel_last):
      """
                              Weight layout
      conv(channel_first)     o,i,k1,k2,...kn
      conv(channel_last)      o,k1,k2,...,kn,i
      deconv(channel_first)   i,o,k1,k2,...,kn
      deconv(channel_last)    i,k1,k2,...,kn,o
      """
      if ip_func.info.type_name == "Convolution":
          axes = list(range(bn_parameters[0].ndim))
          axis_to_switch = -1 if channel_last else 1
          axes[0], axes[axis_to_switch] = axes[axis_to_switch], axes[0]
          bn_parameters = [
              np.transpose(bn_param, axes) for bn_param in bn_parameters
          ]
  
      if ip_func.info.type_name == "Affine":
          bn_parameters = [
              bn_param.reshape(bn_param.shape[1], bn_param.shape[0])
              for bn_param in bn_parameters
          ]
  
      return bn_parameters
  
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 3 for calling the BatchNormalizationFoldingModifierInner obj's underlying member method code with example usage: obj.reshape_bn_parameters(ip_func, bn_parameters, channel_last) and returns: bn_parameters