class_docstr: Implement of GAT
class_docstr_tok: ["Implement","of","GAT"]
code: def forward(self, graph_wrapper, feature, phase):
      if phase == "train":
          edge_dropout = self.edge_dropout
      else:
          edge_dropout = 0
  
      for i in range(self.num_layers):
          ngw = pgl.sample.edge_drop(graph_wrapper, edge_dropout)
  
          feature = conv.gat(
              ngw,
              feature,
              self.hidden_size,
              activation="elu",
              name="gat_layer_%s" % i,
              num_heads=self.num_heads,
              feat_drop=self.feat_dropout,
              attn_drop=self.attn_dropout,
          )
  
      ngw = pgl.sample.edge_drop(graph_wrapper, edge_dropout)
      feature = conv.gat(
          ngw,
          feature,
          self.num_class,
          num_heads=1,
          activation=None,
          feat_drop=self.feat_dropout,
          attn_drop=self.attn_dropout,
          name="output",
      )
      return feature
  
imports: import pgl
  import paddle.fluid.layers
  import pgl.layers.conv
label_desc: Use image node_id 2 for calling the GAT obj's underlying member method code with example usage: obj.forward(graph_wrapper, feature, phase) and returns: feature