class_docstr: CKE is a knowledge-based recommendation model, it can incorporate KG and other information such as corresponding
  images to enrich the representation of items for item recommendations.
  
  Note:
      In the original paper, CKE used structural knowledge, textual knowledge and visual knowledge. In our
      implementation, we only used structural knowledge. Meanwhile, the version we implemented uses a simpler
      regular way which can get almost the same result (even better) as the original regular way.
class_docstr_tok: ["CKE","is","a","knowledge-based","recommendation","model",",","it","can","incorporate","KG","and","other","information","such","as","corresponding","images","to","enrich","the","representation","of","items","for","item","recommendations",".","Note",":","In","the","original","paper",",","CKE","used","structural","knowledge",",","textual","knowledge","and","visual","knowledge",".","In","our","implementation",",","we","only","used","structural","knowledge",".","Meanwhile",",","the","version","we","implemented","uses","a","simpler","regular","way","which","can","get","almost","the","same","result","(","even","better",")","as","the","original","regular","way","."]
code: def calculate_loss(self, interaction):
      user = interaction[self.USER_ID]
      pos_item = interaction[self.ITEM_ID]
      neg_item = interaction[self.NEG_ITEM_ID]
      h = interaction[self.HEAD_ENTITY_ID]
      r = interaction[self.RELATION_ID]
      pos_t = interaction[self.TAIL_ENTITY_ID]
      neg_t = interaction[self.NEG_TAIL_ENTITY_ID]
  
      user_e = self.user_embedding(user)
      pos_item_e = self.item_embedding(pos_item)
      neg_item_e = self.item_embedding(neg_item)
      pos_item_kg_e = self.entity_embedding(pos_item)
      neg_item_kg_e = self.entity_embedding(neg_item)
      pos_item_final_e = pos_item_e + pos_item_kg_e
      neg_item_final_e = neg_item_e + neg_item_kg_e
  
      rec_loss = self._get_rec_loss(
          user_e, pos_item_final_e, neg_item_final_e
      )
  
      h_e, r_e, pos_t_e, neg_t_e, r_trans_w = self._get_kg_embedding(
          h, r, pos_t, neg_t
      )
      kg_loss = self._get_kg_loss(h_e, r_e, pos_t_e, neg_t_e)
  
      reg_loss = self.reg_weights[0] * self.reg_loss(
          user_e, pos_item_final_e, neg_item_final_e
      ) + self.reg_weights[1] * self.reg_loss(
          h_e, r_e, pos_t_e, neg_t_e
      )
  
      return rec_loss, kg_loss, reg_loss
  
file_path: RecBole/recbole/model/knowledge_aware_recommender/cke.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from recbole.model.abstract_recommender import KnowledgeRecommender
  from recbole.model.init import xavier_normal_initialization
  from recbole.model.loss import BPRLoss, EmbLoss
  from recbole.utils import InputType
label_desc: Use image node_id 6 for calling the CKE obj's underlying member method code with example usage: obj.calculate_loss(interaction) and returns: rec_loss,  kg_loss,  reg_loss