docstr: Decodes the inputs into a sequence.
  
  Args:
      inputs: Dictionary of tensors from the outputs of the combiner and other output features.
      target: Tensor [batch_size, max_sequence_length] with predictions.
  
  Returns:
      Dictionary of tensors with logits [batch_size, max_sequence_length, vocab_size].
docstr_tok: ["Decodes","the","inputs","into","a","sequence",".","Args",":","inputs",":","Dictionary","of","tensors","from","the","outputs","of","the","combiner","and","other","output","features",".","target",":","Tensor","[","batch_size",",","max_sequence_length","]","with","predictions",".","Returns",":","Dictionary","of","tensors","with","logits","[","batch_size",",","max_sequence_length",",","vocab_size","]","."]
code: def forward(
      self, inputs: Dict[str, torch.Tensor], target: torch.Tensor = None
  ) -> Dict[str, torch.Tensor]:
      """Decodes the inputs into a sequence.
  
      Args:
          inputs: Dictionary of tensors from the outputs of the combiner and other output features.
          target: Tensor [batch_size, max_sequence_length] with predictions.
  
      Returns:
          Dictionary of tensors with logits [batch_size, max_sequence_length, vocab_size].
      """
      hidden = inputs[HIDDEN]
      if len(hidden.size()) != 3:
          raise ValueError(
              f"Decoder inputs rank is {len(hidden.size())}, but should be 3: "
              + "[batch_size x max_sequence_length x hidden_size] in when using a tagger sequential decoder. "
              + "Consider setting reduce_output to None if a sequential encoder / combiner is used."
          )
      if list(hidden.shape[1:]) != [
          self.max_sequence_length,
          self.input_size,
      ]:
          raise ValueError(
              "Sequence tagger decoder inputs (hidden) should be [batch_size, self.max_sequence_length, "
              + f"input_size], or [batch_size, {self.max_sequence_length}, {self.input_size}]. However, the "
              + f"inputs (hidden) was instead: {list(hidden.size())}. "
              + "The encoder is not length preserving. Please check its configuration."
          )
  
      if self.use_attention:
          hidden = self.self_attention(hidden)
  
      logits = self.projection_layer(hidden)
      return {LOGITS: logits}
  
file_path: ludwig/ludwig/decoders/sequence_tagger.py
imports: import logging
  from typing import Dict
  import torch
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import HIDDEN, LOGITS, PREDICTIONS, PROBABILITIES, SEQUENCE, TEXT
  from ludwig.decoders.base import Decoder
  from ludwig.decoders.registry import register_decoder
  from ludwig.modules.attention_modules import MultiHeadSelfAttention
  from ludwig.schema.decoders.sequence_decoders import SequenceTaggerDecoderConfig
  from ludwig.utils.torch_utils import Dense
label_desc: Use image node_id 2 for calling the SequenceTaggerDecoder obj's underlying member method code with example usage: obj.forward(inputs, target) and returns: dict