class_docstr: Graves Attention as is ref1 with updates from ref2.
  ref1: https://arxiv.org/abs/1910.10288
  ref2: https://arxiv.org/pdf/1906.01083.pdf
  
  Args:
      query_dim (int): number of channels in query tensor.
      K (int): number of Gaussian heads to be used for computing attention.
code: def __init__(self, query_dim, K):
      super().__init__()
      self._mask_value = 1e-8
      self.K = K
      # self.attention_alignment = 0.05
      self.eps = 1e-5
      self.J = None
      self.N_a = nn.Sequential(
          nn.Linear(query_dim, query_dim, bias=True),
          nn.ReLU(),
          nn.Linear(query_dim, 3 * K, bias=True),
      )
      self.attention_weights = None
      self.mu_prev = None
      self.init_layers()
  
imports: import torch
  from scipy.stats import betabinom
  from torch import nn
  from torch.nn import functional
  from TTS.tts.layers.tacotron.common_layers import Linear
label_desc: Use image node_id 1 to create a new GravesAttention object from inherited base classes: nn with example: obj = GravesAttention(query_dim, K)