class_docstr: LinearBottleneck used in MobileNetV2 model from the
  `"Inverted Residuals and Linear Bottlenecks:
    Mobile Networks for Classification, Detection and Segmentation"
  <https://arxiv.org/abs/1801.04381>`_ paper.
  
  Parameters
  ----------
  in_channels : int
      Number of input channels.
  channels : int
      Number of output channels.
  t : int
      Layer expansion ratio.
  stride : int
      stride
  norm_layer : object
      Normalization layer used (default: :class:`mxnet.gluon.nn.BatchNorm`)
      Can be :class:`mxnet.gluon.nn.BatchNorm` or :class:`mxnet.gluon.contrib.nn.SyncBatchNorm`.
  norm_kwargs : dict
      Additional `norm_layer` arguments, for example `num_devices=4`
      for :class:`mxnet.gluon.contrib.nn.SyncBatchNorm`.
class_docstr_tok: ["LinearBottleneck","used","in","MobileNetV2","model","from","the","`","``","Inverted","Residuals","and","Linear","Bottlenecks",":","Mobile","Networks","for","Classification",",","Detection","and","Segmentation","''","<","https",":","\/\/arxiv.org\/abs\/1801.04381",">","`","_","paper",".","Parameters","--","--","--","--","--","in_channels",":","int","Number","of","input","channels",".","channels",":","int","Number","of","output","channels",".","t",":","int","Layer","expansion","ratio",".","stride",":","int","stride","norm_layer",":","object","Normalization","layer","used","(","default",":",":","class",":","`","mxnet.gluon.nn.BatchNorm","`",")","Can","be",":","class",":","`","mxnet.gluon.nn.BatchNorm","`","or",":","class",":","`","mxnet.gluon.contrib.nn.SyncBatchNorm","`",".","norm_kwargs",":","dict","Additional","`","norm_layer","`","arguments",",","for","example","`","num_devices=4","`","for",":","class",":","`","mxnet.gluon.contrib.nn.SyncBatchNorm","`","."]
code: def __init__(
      self,
      in_channels,
      channels,
      t,
      stride,
      norm_layer=BatchNorm,
      norm_kwargs=None,
      **kwargs,
  ):
      super(LinearBottleneck, self).__init__(**kwargs)
      self.use_shortcut = stride == 1 and in_channels == channels
      with self.name_scope():
          self.out = nn.HybridSequential()
  
          if t != 1:
              _add_conv(
                  self.out,
                  in_channels * t,
                  relu6=True,
                  norm_layer=norm_layer,
                  norm_kwargs=norm_kwargs,
              )
          _add_conv(
              self.out,
              in_channels * t,
              kernel=3,
              stride=stride,
              pad=1,
              num_group=in_channels * t,
              relu6=True,
              norm_layer=norm_layer,
              norm_kwargs=norm_kwargs,
          )
          _add_conv(
              self.out,
              channels,
              active=False,
              relu6=True,
              norm_layer=norm_layer,
              norm_kwargs=norm_kwargs,
          )
  
imports: from mxnet.gluon import nn
  from mxnet.gluon.nn import BatchNorm
  from mxnet.context import cpu
  from mxnet.gluon.block import HybridBlock
  from ..nn import ReLU6
label_desc: Use image node_id 1 to create a new LinearBottleneck object from inherited base classes: nn with example: obj = LinearBottleneck(in_channels, channels, t, stride, norm_layer, norm_kwargs)