class_docstr: Model for Graph Property Prediction Based on Graph Attention Networks (GAT).
  
  This model proceeds as follows:
  
  * Update node representations in graphs with a variant of GAT
  * For each graph, compute its representation by 1) a weighted sum of the node
      representations in the graph, where the weights are computed by applying a
      gating function to the node representations 2) a max pooling of the node
      representations 3) concatenating the output of 1) and 2)
  * Perform the final prediction using an MLP
  
  Examples
  --------
  >>> import deepchem as dc
  >>> from deepchem.models import GATModel
  >>> # preparing dataset
  >>> smiles = ["C1CCC1", "C1=CC=CN=C1"]
  >>> labels = [0., 1.]
  >>> featurizer = dc.feat.MolGraphConvFeaturizer()
  >>> X = featurizer.featurize(smiles)
  >>> dataset = dc.data.NumpyDataset(X=X, y=labels)
  >>> # training model
  >>> model = GATModel(mode='classification', n_tasks=1,
  ...                  batch_size=16, learning_rate=0.001)
  >>> loss = model.fit(dataset, nb_epoch=5)
  
  References
  ----------
  .. [1] Petar Veličković, Guillem Cucurull, Arantxa Casanova, Adriana Romero, Pietro Liò,
      and Yoshua Bengio. "Graph Attention Networks." ICLR 2018.
  
  Notes
  -----
  This class requires DGL (https://github.com/dmlc/dgl) and DGL-LifeSci
  (https://github.com/awslabs/dgl-lifesci) to be installed.
class_docstr_tok: ["Model","for","Graph","Property","Prediction","Based","on","Graph","Attention","Networks","(","GAT",")",".","This","model","proceeds","as","follows",":","*","Update","node","representations","in","graphs","with","a","variant","of","GAT","*","For","each","graph",",","compute","its","representation","by","1",")","a","weighted","sum","of","the","node","representations","in","the","graph",",","where","the","weights","are","computed","by","applying","a","gating","function","to","the","node","representations","2",")","a","max","pooling","of","the","node","representations","3",")","concatenating","the","output","of","1",")","and","2",")","*","Perform","the","final","prediction","using","an","MLP","Examples","--","--","--","--",">",">",">","import","deepchem","as","dc",">",">",">","from","deepchem.models","import","GATModel",">",">",">","#","preparing","dataset",">",">",">","smiles","=","[","``","C1CCC1","''",",","``","C1=CC=CN=C1","''","]",">",">",">","labels","=","[","0.",",","1",".","]",">",">",">","featurizer","=","dc.feat.MolGraphConvFeaturizer","(",")",">",">",">","X","=","featurizer.featurize","(","smiles",")",">",">",">","dataset","=","dc.data.NumpyDataset","(","X=X",",","y=labels",")",">",">",">","#","training","model",">",">",">","model","=","GATModel","(","mode='classification","'",",","n_tasks=1",",","...","batch_size=16",",","learning_rate=0.001",")",">",">",">","loss","=","model.fit","(","dataset",",","nb_epoch=5",")","References","--","--","--","--","--","..","[","1","]","Petar","Veli\u010dkovi\u0107",",","Guillem","Cucurull",",","Arantxa","Casanova",",","Adriana","Romero",",","Pietro","Li\u00f2",",","and","Yoshua","Bengio",".","``","Graph","Attention","Networks",".","''","ICLR","2018",".","Notes","--","--","-","This","class","requires","DGL","(","https",":","\/\/github.com\/dmlc\/dgl",")","and","DGL-LifeSci","(","https",":","\/\/github.com\/awslabs\/dgl-lifesci",")","to","be","installed","."]
docstr: Parameters
  ----------
  n_tasks: int
      Number of tasks.
  graph_attention_layers: list of int
      Width of channels per attention head for GAT layers. graph_attention_layers[i]
      gives the width of channel for each attention head for the i-th GAT layer. If
      both ``graph_attention_layers`` and ``agg_modes`` are specified, they should have
      equal length. If not specified, the default value will be [8, 8].
  n_attention_heads: int
      Number of attention heads in each GAT layer.
  agg_modes: list of str
      The way to aggregate multi-head attention results for each GAT layer, which can be
      either 'flatten' for concatenating all-head results or 'mean' for averaging all-head
      results. ``agg_modes[i]`` gives the way to aggregate multi-head attention results for
      the i-th GAT layer. If both ``graph_attention_layers`` and ``agg_modes`` are
      specified, they should have equal length. If not specified, the model will flatten
      multi-head results for intermediate GAT layers and compute mean of multi-head results
      for the last GAT layer.
  activation: activation function or None
      The activation function to apply to the aggregated multi-head results for each GAT
      layer. If not specified, the default value will be ELU.
  residual: bool
      Whether to add a residual connection within each GAT layer. Default to True.
  dropout: float
      The dropout probability within each GAT layer. Default to 0.
  alpha: float
      A hyperparameter in LeakyReLU, which is the slope for negative values. Default to 0.2.
  predictor_hidden_feats: int
      The size for hidden representations in the output MLP predictor. Default to 128.
  predictor_dropout: float
      The dropout probability in the output MLP predictor. Default to 0.
  mode: str
      The model type, 'classification' or 'regression'. Default to 'regression'.
  number_atom_features: int
      The length of the initial atom feature vectors. Default to 30.
  n_classes: int
      The number of classes to predict per task
      (only used when ``mode`` is 'classification'). Default to 2.
  self_loop: bool
      Whether to add self loops for the nodes, i.e. edges from nodes to themselves.
      When input graphs have isolated nodes, self loops allow preserving the original feature
      of them in message passing. Default to True.
  kwargs
      This can include any keyword argument of TorchModel.
docstr_tok: ["Parameters","--","--","--","--","--","n_tasks",":","int","Number","of","tasks",".","graph_attention_layers",":","list","of","int","Width","of","channels","per","attention","head","for","GAT","layers",".","graph_attention_layers","[","i","]","gives","the","width","of","channel","for","each","attention","head","for","the","i-th","GAT","layer",".","If","both","``","graph_attention_layers","``","and","``","agg_modes","``","are","specified",",","they","should","have","equal","length",".","If","not","specified",",","the","default","value","will","be","[","8",",","8","]",".","n_attention_heads",":","int","Number","of","attention","heads","in","each","GAT","layer",".","agg_modes",":","list","of","str","The","way","to","aggregate","multi-head","attention","results","for","each","GAT","layer",",","which","can","be","either","'flatten","'","for","concatenating","all-head","results","or","'mean","'","for","averaging","all-head","results",".","``","agg_modes","[","i","]","``","gives","the","way","to","aggregate","multi-head","attention","results","for","the","i-th","GAT","layer",".","If","both","``","graph_attention_layers","``","and","``","agg_modes","``","are","specified",",","they","should","have","equal","length",".","If","not","specified",",","the","model","will","flatten","multi-head","results","for","intermediate","GAT","layers","and","compute","mean","of","multi-head","results","for","the","last","GAT","layer",".","activation",":","activation","function","or","None","The","activation","function","to","apply","to","the","aggregated","multi-head","results","for","each","GAT","layer",".","If","not","specified",",","the","default","value","will","be","ELU",".","residual",":","bool","Whether","to","add","a","residual","connection","within","each","GAT","layer",".","Default","to","True",".","dropout",":","float","The","dropout","probability","within","each","GAT","layer",".","Default","to","0.","alpha",":","float","A","hyperparameter","in","LeakyReLU",",","which","is","the","slope","for","negative","values",".","Default","to","0.2.","predictor_hidden_feats",":","int","The","size","for","hidden","representations","in","the","output","MLP","predictor",".","Default","to","128.","predictor_dropout",":","float","The","dropout","probability","in","the","output","MLP","predictor",".","Default","to","0.","mode",":","str","The","model","type",",","'classification","'","or","'regression","'",".","Default","to","'regression","'",".","number_atom_features",":","int","The","length","of","the","initial","atom","feature","vectors",".","Default","to","30.","n_classes",":","int","The","number","of","classes","to","predict","per","task","(","only","used","when","``","mode","``","is","'classification","'",")",".","Default","to","2.","self_loop",":","bool","Whether","to","add","self","loops","for","the","nodes",",","i.e",".","edges","from","nodes","to","themselves",".","When","input","graphs","have","isolated","nodes",",","self","loops","allow","preserving","the","original","feature","of","them","in","message","passing",".","Default","to","True",".","kwargs","This","can","include","any","keyword","argument","of","TorchModel","."]
code: def __init__(
      self,
      n_tasks: int,
      graph_attention_layers: Optional[list] = None,
      n_attention_heads: int = 8,
      agg_modes: Optional[list] = None,
      activation=F.elu,
      residual: bool = True,
      dropout: float = 0.0,
      alpha: float = 0.2,
      predictor_hidden_feats: int = 128,
      predictor_dropout: float = 0.0,
      mode: str = "regression",
      number_atom_features: int = 30,
      n_classes: int = 2,
      self_loop: bool = True,
      **kwargs,
  ):
      """
      Parameters
      ----------
      n_tasks: int
          Number of tasks.
      graph_attention_layers: list of int
          Width of channels per attention head for GAT layers. graph_attention_layers[i]
          gives the width of channel for each attention head for the i-th GAT layer. If
          both ``graph_attention_layers`` and ``agg_modes`` are specified, they should have
          equal length. If not specified, the default value will be [8, 8].
      n_attention_heads: int
          Number of attention heads in each GAT layer.
      agg_modes: list of str
          The way to aggregate multi-head attention results for each GAT layer, which can be
          either 'flatten' for concatenating all-head results or 'mean' for averaging all-head
          results. ``agg_modes[i]`` gives the way to aggregate multi-head attention results for
          the i-th GAT layer. If both ``graph_attention_layers`` and ``agg_modes`` are
          specified, they should have equal length. If not specified, the model will flatten
          multi-head results for intermediate GAT layers and compute mean of multi-head results
          for the last GAT layer.
      activation: activation function or None
          The activation function to apply to the aggregated multi-head results for each GAT
          layer. If not specified, the default value will be ELU.
      residual: bool
          Whether to add a residual connection within each GAT layer. Default to True.
      dropout: float
          The dropout probability within each GAT layer. Default to 0.
      alpha: float
          A hyperparameter in LeakyReLU, which is the slope for negative values. Default to 0.2.
      predictor_hidden_feats: int
          The size for hidden representations in the output MLP predictor. Default to 128.
      predictor_dropout: float
          The dropout probability in the output MLP predictor. Default to 0.
      mode: str
          The model type, 'classification' or 'regression'. Default to 'regression'.
      number_atom_features: int
          The length of the initial atom feature vectors. Default to 30.
      n_classes: int
          The number of classes to predict per task
          (only used when ``mode`` is 'classification'). Default to 2.
      self_loop: bool
          Whether to add self loops for the nodes, i.e. edges from nodes to themselves.
          When input graphs have isolated nodes, self loops allow preserving the original feature
          of them in message passing. Default to True.
      kwargs
          This can include any keyword argument of TorchModel.
      """
      model = GAT(
          n_tasks=n_tasks,
          graph_attention_layers=graph_attention_layers,
          n_attention_heads=n_attention_heads,
          agg_modes=agg_modes,
          activation=activation,
          residual=residual,
          dropout=dropout,
          alpha=alpha,
          predictor_hidden_feats=predictor_hidden_feats,
          predictor_dropout=predictor_dropout,
          mode=mode,
          number_atom_features=number_atom_features,
          n_classes=n_classes,
      )
      if mode == "regression":
          loss: Loss = L2Loss()
          output_types = ["prediction"]
      else:
          loss = SparseSoftmaxCrossEntropy()
          output_types = ["prediction", "loss"]
      super(GATModel, self).__init__(
          model, loss=loss, output_types=output_types, **kwargs
      )
  
      self._self_loop = self_loop
  
file_path: deepchem/deepchem/models/torch_models/gat.py
imports: import torch.nn
  import torch.nn.functional
  from deepchem.models.losses import Loss, L2Loss, SparseSoftmaxCrossEntropy
  from deepchem.models.torch_models.torch_model import TorchModel
  from typing import Optional
label_desc: Use image node_id 1 to create a new GATModel object from inherited base classes: TorchModel with example: obj = GATModel(n_tasks, graph_attention_layers, n_attention_heads, agg_modes, activation, residual, dropout, alpha, predictor_hidden_feats, predictor_dropout, mode, number_atom_features, n_classes, _loop)