class_docstr: Bottleneck transformation: 1x1, 3x3 [+SE], 1x1.
class_docstr_tok: ["Bottleneck","transformation",":","1x1",",","3x3","[","+SE","]",",","1x1","."]
code: def __init__(self, w_in, w_out, stride, params):
      super(BottleneckTransform, self).__init__()
      w_b = int(round(w_out * params["bot_mul"]))
      w_se = int(round(w_in * params["se_r"]))
      groups = w_b // params["group_w"]
      self.a = conv2d(w_in, w_b, 1)
      self.a_bn = norm2d(w_b)
      self.a_af = activation()
      self.b = conv2d(w_b, w_b, 3, stride=stride, groups=groups)
      self.b_bn = norm2d(w_b)
      self.b_af = activation()
      self.se = SE(w_b, w_se) if w_se else None
      self.c = conv2d(w_b, w_out, 1)
      self.c_bn = norm2d(w_out)
      self.c_bn.final_bn = True
  
imports: from pycls.core.config import cfg
  from pycls.models.blocks import activation, conv2d, conv2d_cx, gap2d, gap2d_cx, init_weights, linear, linear_cx, norm2d, norm2d_cx, pool2d, pool2d_cx, SE
  from torch.nn import Module
label_desc: Use image node_id 1 to create a new BottleneckTransform object from inherited base classes: Module with example: obj = BottleneckTransform(w_in, w_out, stride, params)