class_docstr: It is an extension of GRU4Rec, which concatenates item and its corresponding
  pre-trained knowledge graph embedding feature as the input.
class_docstr_tok: ["It","is","an","extension","of","GRU4Rec",",","which","concatenates","item","and","its","corresponding","pre-trained","knowledge","graph","embedding","feature","as","the","input","."]
code: def forward(self, item_seq, item_seq_len):
      item_emb = self.item_embedding(item_seq)
      entity_emb = self.entity_embedding(item_seq)
      item_emb = nn.Dropout(self.dropout)(item_emb)
      entity_emb = nn.Dropout(self.dropout)(entity_emb)
  
      item_gru_output, _ = self.item_gru_layers(item_emb)  # [B Len H]
      entity_gru_output, _ = self.entity_gru_layers(entity_emb)
  
      output_concat = torch.cat(
          (item_gru_output, entity_gru_output), -1
      )  # [B Len 2*H]
      output = self.dense_layer(output_concat)
      output = self.gather_indexes(output, item_seq_len - 1)  # [B H]
      return output
  
file_path: RecBole/recbole/model/sequential_recommender/gru4reckg.py
imports: import torch
  from torch import nn
  from recbole.model.abstract_recommender import SequentialRecommender
  from recbole.model.init import xavier_normal_initialization
  from recbole.model.loss import BPRLoss
label_desc: Use image node_id 2 for calling the GRU4RecKG obj's underlying member method code with example usage: obj.forward(item_seq, item_seq_len) and returns: output