class_docstr: CNNLSTM is a simple model for vision and language tasks. CNNLSTM is supposed
  to acts as a baseline to test out your stuff without any complex functionality.
  Passes image through a CNN, and text through an LSTM and fuses them using
  concatenation. Then, it finally passes the fused representation from a MLP to
  generate scores for each of the possible answers.
  
  Args:
      config (DictConfig): Configuration node containing all of the necessary
                           config required to initialize CNNLSTM.
  
  Inputs: sample_list (SampleList)
      - **sample_list** should contain image attribute for image, text for
        question split into word indices, targets for answer scores
code: def build(self):
      assert len(self._datasets) > 0
      num_question_choices = registry.get(
          _TEMPLATES["question_vocab_size"].format(self._datasets[0])
      )
      num_answer_choices = registry.get(
          _TEMPLATES["number_of_answers"].format(self._datasets[0])
      )
  
      self.text_embedding = nn.Embedding(
          num_question_choices, self.config.text_embedding.embedding_dim
      )
      self.lstm = nn.LSTM(**self.config.lstm)
  
      layers_config = self.config.cnn.layers
      conv_layers = []
      for i in range(len(layers_config.input_dims)):
          conv_layers.append(
              ConvNet(
                  layers_config.input_dims[i],
                  layers_config.output_dims[i],
                  kernel_size=layers_config.kernel_sizes[i],
              )
          )
      conv_layers.append(Flatten())
      self.cnn = nn.Sequential(*conv_layers)
  
      # As we generate output dim dynamically, we need to copy the config
      # to update it
      classifier_config = deepcopy(self.config.classifier)
      classifier_config.params.out_dim = num_answer_choices
      self.classifier = ClassifierLayer(
          classifier_config.type, **classifier_config.params
      )
  
file_path: mmf/mmf/models/cnn_lstm.py
imports: from copy import deepcopy
  import torch
  from mmf.common.registry import registry
  from mmf.models.base_model import BaseModel
  from mmf.modules.layers import ClassifierLayer, ConvNet, Flatten
  from torch import nn
label_desc: Use image node_id 3 for calling the CNNLSTM obj's underlying member method code with example usage: obj.build() without return types