class_docstr: GATs Model
  
  Parameters
  ----------
  lr : float
      learning rate
  d_feat : int
      input dimensions for each time step
  metric : str
      the evaluation metric used in early stop
  optimizer : str
      optimizer name
  GPU : int
      the GPU ID used for training
code: def metric_fn(self, pred, label):
      mask = torch.isfinite(label)
  
      if self.metric in ("", "loss"):
          return -self.loss_fn(pred[mask], label[mask])
  
      raise ValueError("unknown metric `%s`" % self.metric)
  
imports: from __future__ import division
  from __future__ import print_function
  import numpy
  import pandas
  import copy
  from ...utils import get_or_create_path
  from ...log import get_module_logger
  import torch
  import torch.nn
  import torch.optim
  from torch.utils.data import DataLoader
  from torch.utils.data import Sampler
  from .pytorch_utils import count_parameters
  from ...model.base import Model
  from ...data.dataset.handler import DataHandlerLP
  from ...contrib.model.pytorch_lstm import LSTMModel
  from ...contrib.model.pytorch_gru import GRUModel
label_desc: Use image node_id 5 for calling the GATs obj's underlying member method code with example usage: obj.metric_fn(pred, label) and returns: unknown