code: def forward(self, data):
      x, edge_index, batch = data.x, data.edge_index, data.batch
      if self.edge_weight:
          edge_attr = data.edge_attr
      else:
          edge_attr = None
      xs = []
      for i in range(self.n_layers):
          x = self.convs[i](x, edge_index, edge_attr)
          x = self.acts[i](x)
          if self.bns is not None:
              x = self.bns[i](x)
          xs.append(x)
  
      if self.pool == "sum":
          xpool = [global_add_pool(x, batch) for x in xs]
      else:
          xpool = [global_mean_pool(x, batch) for x in xs]
      global_rep = torch.cat(xpool, 1)
  
      return global_rep, x
  
imports: from functools import partial
  import torch
  import torch.nn.functional
  from torch.nn import Parameter
  from torch.nn import Sequential, Linear, BatchNorm1d
  from torch_scatter import scatter_add
  from torch_geometric.nn import GINConv, GCNConv, global_add_pool, global_mean_pool
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.utils import remove_self_loops, add_self_loops
  from torch_geometric.nn.inits import glorot, zeros
label_desc: Use image node_id 3 for calling the GCN obj's underlying member method code with example usage: obj.forward(data) and returns: global_rep,  x