class_docstr: A bottleneck layer.
  
  Args:
      in_channels (int): The number of channels of the input array.
      mid_channels (int): The number of channels of intermediate arrays.
      out_channels (int): The number of channels of the output array.
      stride (int or tuple of ints): Stride of filter application.
      dilate (int or tuple of ints): Dilation factor of filter applications.
          :obj:`dilate=d` and :obj:`dilate=(d, d)` are equivalent.
      groups (int): The number of groups to use grouped convolution in the
          second layer. The default is one, where grouped convolution is
          not used.
      initialW (callable): Initial weight value used in
          the convolutional layers.
      bn_kwargs (dict): Keyword arguments passed to initialize
          :class:`chainer.links.BatchNormalization`.
      residual_conv (bool): If :obj:`True`, apply a 1x1 convolution
          to the residual.
      stride_first (bool): If :obj:`True`, apply strided convolution
          with the first convolution layer. Otherwise, apply
          strided convolution with the second convolution layer.
      add_seblock (bool): If :obj:`True`, apply a squeeze-and-excitation
          block to each residual block.
code: def forward(self, x):
      h = self.conv1(x)
      h = self.conv2(h)
      h = self.conv3(h)
      if hasattr(self, "se"):
          h = self.se(h)
  
      if hasattr(self, "residual_conv"):
          residual = self.residual_conv(x)
      else:
          residual = x
      h += residual
      h = F.relu(h)
      return h
  
file_path: chainercv/chainercv/links/model/resnet/resblock.py
imports: import chainer
  import chainer.functions
  from chainercv.links import Conv2DBNActiv
  from chainercv.links import PickableSequentialChain
  from chainercv.links import SEBlock
label_desc: Use image node_id 2 for calling the Bottleneck obj's underlying member method code with example usage: obj.forward(x) and returns: h