class_docstr: A graph convolutional layer (GCN) from the paper
  
  > [Semi-Supervised Classification with Graph Convolutional Networks](https://arxiv.org/abs/1609.02907)<br>
  > Thomas N. Kipf and Max Welling
  
  **Mode**: single, disjoint, mixed, batch.
  
  This layer computes:
  $$
      \X' = \hat \D^{-1/2} \hat \A \hat \D^{-1/2} \X \W + \b
  $$
  where \( \hat \A = \A + \I \) is the adjacency matrix with added self-loops
  and \(\hat\D\) is its degree matrix.
  
  **Input**
  
  - Node features of shape `([batch], n_nodes, n_node_features)`;
  - Modified Laplacian of shape `([batch], n_nodes, n_nodes)`; can be computed with
  `spektral.utils.convolution.gcn_filter`.
  
  **Output**
  
  - Node features with the same shape as the input, but with the last
  dimension changed to `channels`.
  
  **Arguments**
  
  - `channels`: number of output channels;
  - `activation`: activation function;
  - `use_bias`: bool, add a bias vector to the output;
  - `kernel_initializer`: initializer for the weights;
  - `bias_initializer`: initializer for the bias vector;
  - `kernel_regularizer`: regularization applied to the weights;
  - `bias_regularizer`: regularization applied to the bias vector;
  - `activity_regularizer`: regularization applied to the output;
  - `kernel_constraint`: constraint applied to the weights;
  - `bias_constraint`: constraint applied to the bias vector.
class_docstr_tok: ["A","graph","convolutional","layer","(","GCN",")","from","the","paper",">","[","Semi-Supervised","Classification","with","Graph","Convolutional","Networks","]","(","https",":","\/\/arxiv.org\/abs\/1609.02907",")","<","br",">",">","Thomas","N.","Kipf","and","Max","Welling","*","*","Mode","*","*",":","single",",","disjoint",",","mixed",",","batch",".","This","layer","computes",":","$","$","\\X","'","=","\\hat","\\D^","{","-1\/2","}","\\hat","\\A","\\hat","\\D^","{","-1\/2","}","\\X","\\W","+","\\b","$","$","where","\\","(","\\hat","\\A","=","\\A","+","\\I","\\",")","is","the","adjacency","matrix","with","added","self-loops","and","\\","(","\\hat\\D\\",")","is","its","degree","matrix",".","*","*","Input","*","*","-","Node","features","of","shape","`","(","[","batch","]",",","n_nodes",",","n_node_features",")","`",";","-","Modified","Laplacian","of","shape","`","(","[","batch","]",",","n_nodes",",","n_nodes",")","`",";","can","be","computed","with","`","spektral.utils.convolution.gcn_filter","`",".","*","*","Output","*","*","-","Node","features","with","the","same","shape","as","the","input",",","but","with","the","last","dimension","changed","to","`","channels","`",".","*","*","Arguments","*","*","-","`","channels","`",":","number","of","output","channels",";","-","`","activation","`",":","activation","function",";","-","`","use_bias","`",":","bool",",","add","a","bias","vector","to","the","output",";","-","`","kernel_initializer","`",":","initializer","for","the","weights",";","-","`","bias_initializer","`",":","initializer","for","the","bias","vector",";","-","`","kernel_regularizer","`",":","regularization","applied","to","the","weights",";","-","`","bias_regularizer","`",":","regularization","applied","to","the","bias","vector",";","-","`","activity_regularizer","`",":","regularization","applied","to","the","output",";","-","`","kernel_constraint","`",":","constraint","applied","to","the","weights",";","-","`","bias_constraint","`",":","constraint","applied","to","the","bias","vector","."]
code: def __init__(
      self,
      channels,
      activation=None,
      use_bias=True,
      kernel_initializer="glorot_uniform",
      bias_initializer="zeros",
      kernel_regularizer=None,
      bias_regularizer=None,
      activity_regularizer=None,
      kernel_constraint=None,
      bias_constraint=None,
      **kwargs,
  ):
      super().__init__(
          activation=activation,
          use_bias=use_bias,
          kernel_initializer=kernel_initializer,
          bias_initializer=bias_initializer,
          kernel_regularizer=kernel_regularizer,
          bias_regularizer=bias_regularizer,
          activity_regularizer=activity_regularizer,
          kernel_constraint=kernel_constraint,
          bias_constraint=bias_constraint,
          **kwargs,
      )
      self.channels = channels
  
file_path: spektral/spektral/layers/convolutional/gcn_conv.py
imports: from tensorflow.keras import backend
  from spektral.layers import ops
  from spektral.layers.convolutional.conv import Conv
  from spektral.utils import gcn_filter
label_desc: Use image node_id 1 to create a new GCNConv object from inherited base classes: Conv with example: obj = GCNConv(channels, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint)