code: def __init__(
      self,
      input_size,
      hidden_size,
      feat_drop=0.6,
      attn_drop=0.6,
      num_heads=1,
      concat=True,
      activation=None,
  ):
      super(GATConv, self).__init__()
      self.hidden_size = hidden_size
      self.num_heads = num_heads
      self.feat_drop = feat_drop
      self.attn_drop = attn_drop
      self.concat = concat
  
      self.linear = nn.Linear(input_size, num_heads * hidden_size)
      self.weight_src = self.create_parameter(
          shape=[num_heads, hidden_size]
      )
      self.weight_dst = self.create_parameter(
          shape=[num_heads, hidden_size]
      )
  
      self.feat_dropout = nn.Dropout(p=feat_drop)
      self.attn_dropout = nn.Dropout(p=attn_drop)
      self.leaky_relu = nn.LeakyReLU(negative_slope=0.2)
  
      if isinstance(activation, str):
          activation = getattr(F, activation)
      self.activation = activation
  
file_path: PGL/examples/gnn_depoly/models/conv/gat_conv.py
imports: import paddle
  import paddle.nn
  from .base_conv import BaseConv
label_desc: Use image node_id 1 to create a new GATConv object from inherited base classes: BaseConv with example: obj = GATConv(input_size, hidden_size, feat_drop, attn_drop, num_heads, concat, activation)