class_docstr: NGCF is a model that incorporate GNN for recommendation.
  We implement the model following the original author with a pairwise training mode.
class_docstr_tok: ["NGCF","is","a","model","that","incorporate","GNN","for","recommendation",".","We","implement","the","model","following","the","original","author","with","a","pairwise","training","mode","."]
code: def forward(self):
      A_hat = (
          self.sparse_dropout(self.norm_adj_matrix)
          if self.node_dropout != 0
          else self.norm_adj_matrix
      )
      all_embeddings = self.get_ego_embeddings()
      embeddings_list = [all_embeddings]
      for gnn in self.GNNlayers:
          all_embeddings = gnn(A_hat, self.eye_matrix, all_embeddings)
          all_embeddings = nn.LeakyReLU(negative_slope=0.2)(
              all_embeddings
          )
          all_embeddings = nn.Dropout(self.message_dropout)(
              all_embeddings
          )
          all_embeddings = F.normalize(all_embeddings, p=2, dim=1)
          embeddings_list += [
              all_embeddings
          ]  # storage output embedding of each layer
      ngcf_all_embeddings = torch.cat(embeddings_list, dim=1)
  
      user_all_embeddings, item_all_embeddings = torch.split(
          ngcf_all_embeddings, [self.n_users, self.n_items]
      )
  
      return user_all_embeddings, item_all_embeddings
  
file_path: RecBole/recbole/model/general_recommender/ngcf.py
imports: import numpy
  import scipy.sparse
  import torch
  import torch.nn
  import torch.nn.functional
  from recbole.model.abstract_recommender import GeneralRecommender
  from recbole.model.init import xavier_normal_initialization
  from recbole.model.layers import BiGNNLayer, SparseDropout
  from recbole.model.loss import BPRLoss, EmbLoss
  from recbole.utils import InputType
label_desc: Use image node_id 5 for calling the NGCF obj's underlying member method code with example usage: obj.forward() and returns: user_all_embeddings,  item_all_embeddings