class_docstr: Basic transformation: 3x3x3 group conv, 3x3x3 group conv
code: def _construct_model(
      self,
      dim_in,
      dim_out,
      temporal_stride,
      spatial_stride,
      groups,
      inplace_relu,
      bn_eps,
      bn_mmt,
  ):
      # 3x3x3 group conv, BN, ReLU.
      branch2a = nn.Conv3d(
          dim_in,
          dim_out,
          [3, 3, 3],  # kernel
          stride=[temporal_stride, spatial_stride, spatial_stride],
          padding=[1, 1, 1],
          groups=groups,
          bias=False,
      )
      branch2a_bn = nn.BatchNorm3d(dim_out, eps=bn_eps, momentum=bn_mmt)
      branch2a_relu = nn.ReLU(inplace=inplace_relu)
      # 3x3x3 group conv, BN, ReLU.
      branch2b = nn.Conv3d(
          dim_out,
          dim_out,
          [3, 3, 3],  # kernel
          stride=[1, 1, 1],
          padding=[1, 1, 1],
          groups=groups,
          bias=False,
      )
      branch2b_bn = nn.BatchNorm3d(dim_out, eps=bn_eps, momentum=bn_mmt)
      branch2b_bn.final_transform_op = True
  
      self.transform = nn.Sequential(
          branch2a, branch2a_bn, branch2a_relu, branch2b, branch2b_bn
      )
  
imports: import torch.nn
  from .r2plus1_util import r2plus1_unit
label_desc: Use image node_id 2 for calling the BasicTransformation obj's underlying member method code with example usage: obj._construct_model(dim_in, dim_out, temporal_stride, spatial_stride, groups, inplace_relu, bn_eps, bn_mmt) without return types