class_docstr: Inception module of the new GoogLeNet with BatchNormalization.
  
  This chain acts like :class:`Inception`, while InceptionBN uses the
  :class:`BatchNormalization` on top of each convolution, the 5x5 convolution
  path is replaced by two consecutive 3x3 convolution applications, and the
  pooling method is configurable.
  
  See: `Batch Normalization: Accelerating Deep Network Training by Reducing
  Internal Covariate Shift <https://arxiv.org/abs/1502.03167>`_.
  
  Args:
      in_channels (int or None): Number of channels of input arrays.
      out1 (int): Output size of the 1x1 convolution path.
      proj3 (int): Projection size of the single 3x3 convolution path.
      out3 (int): Output size of the single 3x3 convolution path.
      proj33 (int): Projection size of the double 3x3 convolutions path.
      out33 (int): Output size of the double 3x3 convolutions path.
      pooltype (str): Pooling type. It must be either ``'max'`` or ``'avg'``.
      proj_pool (int or None): Projection size in the pooling path. If
          ``None``, no projection is done.
      stride (int): Stride parameter of the last convolution of each path.
      conv_init (:ref:`initializer <initializer>`): Initializer to
          initialize the convolution matrix weights.
          When it is :class:`numpy.ndarray`, its ``ndim`` should be 4.
      dtype (numpy.dtype): Type to use in
          :class:`BatchNormalization`.
  
  .. seealso:: :class:`Inception`
code: def forward(self, x):
      outs = []
  
      if self.out1 > 0:
          h1 = self.conv1(x)
          h1 = self.conv1n(h1)
          h1 = relu.relu(h1)
          outs.append(h1)
  
      h3 = relu.relu(self.proj3n(self.proj3(x)))
      h3 = relu.relu(self.conv3n(self.conv3(h3)))
      outs.append(h3)
  
      h33 = relu.relu(self.proj33n(self.proj33(x)))
      h33 = relu.relu(self.conv33an(self.conv33a(h33)))
      h33 = relu.relu(self.conv33bn(self.conv33b(h33)))
      outs.append(h33)
  
      if self.pooltype == "max":
          p = max_pooling_nd.max_pooling_2d(
              x, 3, stride=self.stride, pad=1, cover_all=False
          )
      else:
          p = average_pooling_2d.average_pooling_2d(
              x, 3, stride=self.stride, pad=1
          )
      if self.proj_pool is not None:
          p = relu.relu(self.poolpn(self.poolp(p)))
      outs.append(p)
  
      y = concat.concat(outs, axis=1)
      return y
  
file_path: chainer/chainer/links/connection/inceptionbn.py
imports: import chainer
  from chainer.functions.activation import relu
  from chainer.functions.array import concat
  from chainer.functions.pooling import average_pooling_2d
  from chainer.functions.pooling import max_pooling_nd
  from chainer import link
  from chainer.links.connection import convolution_2d
  from chainer.links.normalization import batch_normalization
label_desc: Use image node_id 2 for calling the InceptionBN obj's underlying member method code with example usage: obj.forward(x) and returns: y