class_docstr: Multi-head-graph-attention layer. This layer consists of equivalent graph attention layers which are computed,
  concatenated and then send through the activation :param non_lin
  
  :param n_heads: The number of attention heads the layer should have.
  :param in_features: The number of input features.
  :param out_features: The number of output features.
  :param alpha: Specify the negative slope of the leakyReLU.
  :param dropout: Specify the dropout to be applied.
  :param avg_out: Specify whether to average the output or if set to false to concatenate it.s
class_docstr_tok: ["Multi-head-graph-attention","layer",".","This","layer","consists","of","equivalent","graph","attention","layers","which","are","computed",",","concatenated","and","then","send","through","the","activation",":","param","non_lin",":","param","n_heads",":","The","number","of","attention","heads","the","layer","should","have",".",":","param","in_features",":","The","number","of","input","features",".",":","param","out_features",":","The","number","of","output","features",".",":","param","alpha",":","Specify","the","negative","slope","of","the","leakyReLU",".",":","param","dropout",":","Specify","the","dropout","to","be","applied",".",":","param","avg_out",":","Specify","whether","to","average","the","output","or","if","set","to","false","to","concatenate","it.s"]
code: def __init__(
      self,
      n_heads: int,
      in_features: int,
      out_features: int,
      alpha: float,
      dropout: float,
      avg_out: bool,
  ):
      super().__init__()
      assert n_heads > 0
      self.n_heads = n_heads
      self.in_features = in_features
      self.out_features = out_features
      self.avg_out = avg_out
      self.attentions = nn.ModuleList()
      for _ in range(self.n_heads):
          self.attentions.append(
              GraphAttentionLayer(
                  in_features, out_features, alpha, dropout
              )
          )
  
imports: from collections import OrderedDict
  from typing import Union, List, Sequence, Dict
  import numpy
  import torch
  import torch.nn.functional
  from torch import nn
  from maze.core.annotations import override
  from maze.core.utils.factory import Factory
  from maze.perception.blocks.feed_forward.graph_conv import GraphAdjacencyMethods
  from maze.perception.blocks.shape_normalization import ShapeNormalizationBlock
label_desc: Use image node_id 1 to create a new GraphMultiHeadAttentionLayer object from inherited base classes: nn with example: obj = GraphMultiHeadAttentionLayer(n_heads, in_features, out_features, alpha, dropout, avg_out)