class_docstr: ResNet models for video action recognition
  Deep Residual Learning for Image Recognition, CVPR 2016
  https://arxiv.org/abs/1512.03385
  
  Parameters
  ----------
  depth : int, default is 50.
      Depth of ResNet, from {18, 34, 50, 101, 152}.
  nclass : int
      Number of classes in the training dataset.
  pretrained_base : bool or str, optional, default is True.
      Load pretrained base network, the extra layers are randomized. Note that
      if pretrained is `True`, this has no effect.
  partial_bn : bool, default False.
      Freeze all batch normalization layers during training except the first layer.
  dropout_ratio : float, default is 0.5.
      The dropout rate of a dropout layer.
      The larger the value, the more strength to prevent overfitting.
  init_std : float, default is 0.001.
      Standard deviation value when initialize the dense layers.
  num_segments : int, default is 1.
      Number of segments used to evenly divide a video.
  num_crop : int, default is 1.
      Number of crops used during evaluation, choices are 1, 3 or 10.
  
  Input: a single video frame or N images from N segments when num_segments > 1
  Output: a single predicted action label
code: def __init__(
      self,
      depth,
      nclass,
      pretrained_base=True,
      dropout_ratio=0.5,
      init_std=0.01,
      num_segments=1,
      num_crop=1,
      partial_bn=False,
      **kwargs,
  ):
      super(ActionRecResNetV1b, self).__init__()
  
      if depth == 18:
          pretrained_model = resnet18_v1b(
              pretrained=pretrained_base, **kwargs
          )
          self.expansion = 1
      elif depth == 34:
          pretrained_model = resnet34_v1b(
              pretrained=pretrained_base, **kwargs
          )
          self.expansion = 1
      elif depth == 50:
          pretrained_model = resnet50_v1b(
              pretrained=pretrained_base, **kwargs
          )
          self.expansion = 4
      elif depth == 101:
          pretrained_model = resnet101_v1b(
              pretrained=pretrained_base, **kwargs
          )
          self.expansion = 4
      elif depth == 152:
          pretrained_model = resnet152_v1b(
              pretrained=pretrained_base, **kwargs
          )
          self.expansion = 4
      else:
          print("No such ResNet configuration for depth=%d" % (depth))
  
      self.dropout_ratio = dropout_ratio
      self.init_std = init_std
      self.feat_dim = 512 * self.expansion
      self.num_segments = num_segments
      self.num_crop = num_crop
  
      with self.name_scope():
          self.conv1 = pretrained_model.conv1
          self.bn1 = pretrained_model.bn1
          self.relu = pretrained_model.relu
          self.maxpool = pretrained_model.maxpool
          self.layer1 = pretrained_model.layer1
          self.layer2 = pretrained_model.layer2
          self.layer3 = pretrained_model.layer3
          self.layer4 = pretrained_model.layer4
          self.avgpool = pretrained_model.avgpool
          self.flat = pretrained_model.flat
          self.drop = nn.Dropout(rate=self.dropout_ratio)
          self.output = nn.Dense(
              units=nclass,
              in_units=self.feat_dim,
              weight_initializer=init.Normal(sigma=self.init_std),
          )
          self.output.initialize()
  
imports: import mxnet
  from mxnet import init
  from mxnet.gluon import nn
  from mxnet.gluon.nn import HybridBlock
  from ..resnetv1b import resnet18_v1b, resnet34_v1b, resnet50_v1b, resnet101_v1b, resnet152_v1b
label_desc: Use image node_id 1 to create a new ActionRecResNetV1b object from inherited base classes: HybridBlock with example: obj = ActionRecResNetV1b(depth, nclass, pretrained_base, dropout_ratio, init_std, num_segments, num_crop, partial_bn)