class_docstr: Implement of GAT
      
class_docstr_tok: ["Implement","of","GAT"]
code: def forward(
      self, graph_list, feature, m2v_feature, label_y, label_idx
  ):
      m2v_fc = self.input_drop(self.m2v_fc(m2v_feature))
      feature = feature + m2v_fc
  
      label_embed = self.label_embed(label_y)
      label_embed = self.input_drop(label_embed)
      feature_label = paddle.gather(feature, label_idx)
      label_embed = paddle.concat([label_embed, feature_label], axis=1)
      label_embed = self.label_mlp(label_embed)
      feature = paddle.scatter(
          feature, label_idx, label_embed, overwrite=True
      )
  
      for idx, (sg, sub_index) in enumerate(graph_list):
          temp_feat = []
          skip_feat = paddle.gather(feature, sub_index, axis=0)
          skip_feat = self.skips[idx](skip_feat)
          skip_feat = self.norms[idx][0](skip_feat)
          skip_feat = F.elu(skip_feat)
          temp_feat.append(skip_feat)
  
          for i in range(self.edge_type):
              masked = sg.edge_feat["edge_type"] == i
              m_sg = self.get_subgraph_by_masked(sg, masked)
              if m_sg is not None:
                  feature_temp = self.gats[idx][i](m_sg, feature)
                  feature_temp = paddle.gather(
                      feature_temp, sub_index, axis=0
                  )
                  feature_temp = self.norms[idx][i + 1](feature_temp)
                  feature_temp = F.elu(feature_temp)
                  # skip_feat += feature_temp
                  temp_feat.append(feature_temp)
          temp_feat = paddle.stack(temp_feat, axis=1)  # b x 3 x dim
          temp_feat_attn = self.path_attns[idx](temp_feat)  # b x 3 x 1
          temp_feat_attn = F.softmax(temp_feat_attn, axis=1)
          temp_feat_attn = paddle.transpose(
              temp_feat_attn, perm=[0, 2, 1]
          )  # b x 1 x 3
          skip_feat = paddle.bmm(temp_feat_attn, temp_feat)[:, 0]
          skip_feat = self.path_norms[idx](skip_feat)
          # feature = F.elu(skip_feat)
          feature = self.dropout(skip_feat)
      output = self.mlp(feature)
      return output
  
file_path: PGL/examples/kddcup2021/MAG240M/r_unimp/models/r_unimp.py
imports: import pgl
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import numpy
  import paddle.fluid.layers
  from pgl.utils.logger import log
  from .gat_conv import linear_init, GATConv
label_desc: Use image node_id 3 for calling the GNNModel obj's underlying member method code with example usage: obj.forward(graph_list, feature, m2v_feature, label_y, label_idx) and returns: output