class_docstr: An `Attention` takes two inputs: a (batched) vector and a matrix, plus an optional mask on the
  rows of the matrix.  We compute the similarity between the vector and each row in the matrix,
  and then (optionally) perform a softmax over rows using those computed similarities.
  
  
  Inputs:
  
  - vector: shape `(batch_size, embedding_dim)`
  - matrix: shape `(batch_size, num_rows, embedding_dim)`
  - matrix_mask: shape `(batch_size, num_rows)`, specifying which rows are just padding.
  
  Output:
  
  - attention: shape `(batch_size, num_rows)`.
  
  # Parameters
  
  normalize : `bool`, optional (default = `True`)
      If true, we normalize the computed similarities with a softmax, to return a probability
      distribution for your attention.  If false, this is just computing a similarity score.
code: def __init__(self, normalize: bool = True) -> None:
      super().__init__()
      self._normalize = normalize
  
file_path: allennlp/allennlp/modules/attention/attention.py
imports: import torch
  from allennlp.common.registrable import Registrable
  from allennlp.nn.util import masked_softmax
label_desc: Use image node_id 1 to create a new Attention object from inherited base classes: torch.nn, Registrable with example: obj = Attention(normalize)