docstr: This function is called in the inner loop of the training epoch. It must
  return a loss that is used for loss.backwards() internally. The self.log(...)
  function can be used to log any training metrics.
  
  PyTorchVideo batches are dictionaries containing each modality or metadata of
  the batch collated video clips. Kinetics contains the following notable keys:
     {
         'video': <video_tensor>,
         'audio': <audio_tensor>,
         'label': <action_label>,
     }
  
  - "video" is a Tensor of shape (batch, channels, time, height, Width)
  - "audio" is a Tensor of shape (batch, channels, time, 1, frequency)
  - "label" is a Tensor of shape (batch, 1)
  
  The PyTorchVideo models and transforms expect the same input shapes and
  dictionary structure making this function just a matter of unwrapping the dict and
  feeding it through the model/loss.
code: def training_step(self, batch, batch_idx):
      """
      This function is called in the inner loop of the training epoch. It must
      return a loss that is used for loss.backwards() internally. The self.log(...)
      function can be used to log any training metrics.
  
      PyTorchVideo batches are dictionaries containing each modality or metadata of
      the batch collated video clips. Kinetics contains the following notable keys:
         {
             'video': <video_tensor>,
             'audio': <audio_tensor>,
             'label': <action_label>,
         }
  
      - "video" is a Tensor of shape (batch, channels, time, height, Width)
      - "audio" is a Tensor of shape (batch, channels, time, 1, frequency)
      - "label" is a Tensor of shape (batch, 1)
  
      The PyTorchVideo models and transforms expect the same input shapes and
      dictionary structure making this function just a matter of unwrapping the dict and
      feeding it through the model/loss.
      """
      x = batch[self.batch_key]
      y_hat = self.model(x)
      loss = F.cross_entropy(y_hat, batch["label"])
      acc = self.train_accuracy(
          F.softmax(y_hat, dim=-1), batch["label"]
      )
      self.log("train_loss", loss)
      self.log(
          "train_acc",
          acc,
          on_step=True,
          on_epoch=True,
          prog_bar=True,
          sync_dist=True,
      )
      return loss
  
imports: import argparse
  import itertools
  import logging
  import os
  import pytorch_lightning
  import pytorchvideo.data
  import pytorchvideo.models.resnet
  import torch
  import torch.nn.functional
  from pytorch_lightning.callbacks import LearningRateMonitor
  from pytorchvideo.transforms import ApplyTransformToKey, Normalize, RandomShortSideScale, RemoveKey, ShortSideScale, UniformTemporalSubsample
  from slurm import copy_and_run_with_config
  from torch.utils.data import DistributedSampler, RandomSampler
  from torchaudio.transforms import MelSpectrogram, Resample
  from torchvision.transforms import CenterCrop, Compose, Lambda, RandomCrop, RandomHorizontalFlip
label_desc: Use image node_id 4 for calling the VideoClassificationLightningModule obj's underlying member method code with example usage: obj.training_step(batch, batch_idx) and returns: loss