class_docstr: Utility layer calculating a single channel of the diffusional convolution.
  
  The procedure is based on [https://arxiv.org/abs/1707.01926](https://arxiv.org/abs/1707.01926)
  
  **Input**
  
  - Node features of shape `([batch], n_nodes, n_node_features)`;
  - Normalized adjacency or attention coef. matrix \(\hat \A \) of shape
  `([batch], n_nodes, n_nodes)`; Use DiffusionConvolution.preprocess to normalize.
  
  **Output**
  
  - Node features with the same shape as the input, but with the last
  dimension changed to \(1\).
  
  **Arguments**
  
  - `num_diffusion_steps`: How many diffusion steps to consider. \(K\) in paper.
  - `kernel_initializer`: initializer for the weights;
  - `kernel_regularizer`: regularization applied to the kernel vectors;
  - `kernel_constraint`: constraint applied to the kernel vectors;
class_docstr_tok: ["Utility","layer","calculating","a","single","channel","of","the","diffusional","convolution",".","The","procedure","is","based","on","[","https",":","\/\/arxiv.org\/abs\/1707.01926","]","(","https",":","\/\/arxiv.org\/abs\/1707.01926",")","*","*","Input","*","*","-","Node","features","of","shape","`","(","[","batch","]",",","n_nodes",",","n_node_features",")","`",";","-","Normalized","adjacency","or","attention","coef",".","matrix","\\","(","\\hat","\\A","\\",")","of","shape","`","(","[","batch","]",",","n_nodes",",","n_nodes",")","`",";","Use","DiffusionConvolution.preprocess","to","normalize",".","*","*","Output","*","*","-","Node","features","with","the","same","shape","as","the","input",",","but","with","the","last","dimension","changed","to","\\","(","1\\",")",".","*","*","Arguments","*","*","-","`","num_diffusion_steps","`",":","How","many","diffusion","steps","to","consider",".","\\","(","K\\",")","in","paper",".","-","`","kernel_initializer","`",":","initializer","for","the","weights",";","-","`","kernel_regularizer","`",":","regularization","applied","to","the","kernel","vectors",";","-","`","kernel_constraint","`",":","constraint","applied","to","the","kernel","vectors",";"]
code: def __init__(
      self,
      num_diffusion_steps,
      kernel_initializer,
      kernel_regularizer,
      kernel_constraint,
      **kwargs,
  ):
      super().__init__(**kwargs)
  
      self.K = num_diffusion_steps
      self.kernel_initializer = kernel_initializer
      self.kernel_regularizer = kernel_regularizer
      self.kernel_constraint = kernel_constraint
  
file_path: spektral/spektral/layers/convolutional/diffusion_conv.py
imports: import tensorflow
  import tensorflow.keras.layers
  from spektral.layers.convolutional.conv import Conv
  from spektral.utils import normalized_adjacency
label_desc: Use image node_id 1 to create a new DiffuseFeatures object from inherited base classes: layers with example: obj = DiffuseFeatures(num_diffusion_steps, kernel_initializer, kernel_regularizer, kernel_constraint)