docstr: Test simple r2plus1d with different inputs.
docstr_tok: ["Test","simple","r2plus1d","with","different","inputs","."]
code: def test_create_r2plus1d(self):
      """
      Test simple r2plus1d with different inputs.
      """
      for (
          input_channel,
          input_clip_length,
          input_crop_size,
      ) in itertools.product((3, 2), (4, 8), (56, 64)):
          stage_spatial_stride = (2, 2, 2, 2)
          stage_temporal_stride = (1, 1, 2, 2)
  
          total_spatial_stride = 2 * np.prod(stage_spatial_stride)
          total_temporal_stride = np.prod(stage_temporal_stride)
          head_pool_kernel_size = (
              input_clip_length // total_temporal_stride,
              input_crop_size // total_spatial_stride,
              input_crop_size // total_spatial_stride,
          )
  
          model = create_r2plus1d(
              input_channel=input_channel,
              model_depth=50,
              model_num_class=400,
              dropout_rate=0.0,
              norm=nn.BatchNorm3d,
              activation=nn.ReLU,
              stem_dim_out=8,
              stem_conv_kernel_size=(1, 7, 7),
              stem_conv_stride=(1, 2, 2),
              stage_conv_b_kernel_size=((3, 3, 3),) * 4,
              stage_spatial_stride=stage_spatial_stride,
              stage_temporal_stride=stage_temporal_stride,
              stage_bottleneck=(
                  create_bottleneck_block,
                  create_2plus1d_bottleneck_block,
                  create_2plus1d_bottleneck_block,
                  create_2plus1d_bottleneck_block,
              ),
              head_pool=nn.AvgPool3d,
              head_pool_kernel_size=head_pool_kernel_size,
              head_output_size=(1, 1, 1),
              head_activation=nn.Softmax,
          )
  
          # Test forwarding.
          for tensor in TestR2plus1d._get_inputs(
              input_channel, input_clip_length, input_crop_size
          ):
              if tensor.shape[1] != input_channel:
                  with self.assertRaises(RuntimeError):
                      out = model(tensor)
                  continue
  
              out = model(tensor)
  
              output_shape = out.shape
              output_shape_gt = (tensor.shape[0], 400)
  
              self.assertEqual(
                  output_shape,
                  output_shape_gt,
                  "Output shape {} is different from expected shape {}".format(
                      output_shape, output_shape_gt
                  ),
              )
  
file_path: pytorchvideo/tests/test_models_r2plus1d.py
imports: import itertools
  import unittest
  import numpy
  import torch
  from pytorchvideo.models.r2plus1d import create_2plus1d_bottleneck_block, create_r2plus1d
  from pytorchvideo.models.resnet import create_bottleneck_block
  from torch import nn
label_desc: Use image node_id 2 for calling the TestR2plus1d obj's underlying member method code with example usage: obj.test_create_r2plus1d() without return types