code: def track_acc(data):
      data = utils.process_data(data)
      device = utils.get_bench_device()
  
      g = data[0].to(device).int()
  
      features = g.ndata["feat"]
      labels = g.ndata["label"]
      train_mask = g.ndata["train_mask"]
      val_mask = g.ndata["val_mask"]
      test_mask = g.ndata["test_mask"]
  
      in_feats = features.shape[1]
      n_classes = data.num_classes
  
      g = dgl.remove_self_loop(g)
      g = dgl.add_self_loop(g)
  
      # normalization
      degs = g.in_degrees().float()
      norm = torch.pow(degs, -0.5)
      norm[torch.isinf(norm)] = 0
      g.ndata["norm"] = norm.unsqueeze(1)
  
      # create GCN model
      model = GCN(in_feats, 16, n_classes, 1, F.relu, 0.5)
      loss_fcn = torch.nn.CrossEntropyLoss()
  
      model = model.to(device)
      model.train()
  
      # optimizer
      optimizer = torch.optim.Adam(
          model.parameters(), lr=1e-2, weight_decay=5e-4
      )
      for epoch in range(200):
          logits = model(g, features)
          loss = loss_fcn(logits[train_mask], labels[train_mask])
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()
  
      acc = evaluate(model, g, features, labels, test_mask)
      return acc
  
file_path: dgl/benchmarks/benchmarks/model_acc/bench_gcn_udf.py
imports: import dgl
  import torch
  import torch.nn
  import torch.nn.functional
  from ..None import utils
label_desc: Use image node_id 2 for calling a global function with example usage: track_acc(data) and returns: acc