class_docstr: The GraphSAGE operator from the `"Inductive Representation Learning on
  Large Graphs" <https://arxiv.org/abs/1706.02216>`_ paper
  
  .. math::
      \mathbf{\hat{x}}_i &= \mathbf{\Theta} \cdot
      \mathrm{mean}_{j \in \mathcal{N(i) \cup \{ i \}}}(\mathbf{x}_j)
  
      \mathbf{x}^{\prime}_i &= \frac{\mathbf{\hat{x}}_i}
      {\| \mathbf{\hat{x}}_i \|_2}.
  
  Args:
      in_channels (int): Size of each input sample.
      out_channels (int): Size of each output sample.
      normalize (bool, optional): If set to :obj:`True`, output features
          will be :math:`\ell_2`-normalized. (default: :obj:`False`)
      concat (bool, optional): If set to :obj:`True`, will concatenate
          current node features with aggregated ones. (default: :obj:`False`)
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.conv.MessagePassing`.
class_docstr_tok: ["The","GraphSAGE","operator","from","the","`","``","Inductive","Representation","Learning","on","Large","Graphs","''","<","https",":","\/\/arxiv.org\/abs\/1706.02216",">","`","_","paper","..","math",":",":","\\mathbf","{","\\hat","{","x","}","}","_i","&","=","\\mathbf","{","\\Theta","}","\\cdot","\\mathrm","{","mean","}","_","{","j","\\in","\\mathcal","{","N","(","i",")","\\cup","\\","{","i","\\","}","}","}","(","\\mathbf","{","x","}","_j",")","\\mathbf","{","x","}","^","{","\\prime","}","_i","&","=","\\frac","{","\\mathbf","{","\\hat","{","x","}","}","_i","}","{","\\|","\\mathbf","{","\\hat","{","x","}","}","_i","\\|_2","}",".","Args",":","in_channels","(","int",")",":","Size","of","each","input","sample",".","out_channels","(","int",")",":","Size","of","each","output","sample",".","normalize","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","True","`",",","output","features","will","be",":","math",":","`","\\ell_2","`","-normalized",".","(","default",":",":","obj",":","`","False","`",")","concat","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","True","`",",","will","concatenate","current","node","features","with","aggregated","ones",".","(","default",":",":","obj",":","`","False","`",")","bias","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","the","layer","will","not","learn","an","additive","bias",".","(","default",":",":","obj",":","`","True","`",")","*","*","kwargs","(","optional",")",":","Additional","arguments","of",":","class",":","`","torch_geometric.nn.conv.MessagePassing","`","."]
code: def reset_parameters(self):
      # original initialization
      # uniform(self.weight.size(0), self.weight)
      # uniform(self.weight.size(0), self.bias)
      # change to new initialization
      glorot(self.weight)
      zeros(self.bias)
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch.nn import Parameter
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.inits import glorot, zeros
  from torch_geometric.utils import add_remaining_self_loops
  from graphgym.register import register_layer
label_desc: Use image node_id 2 for calling the SAGEConvLayer obj's underlying member method code with example usage: obj.reset_parameters() without return types