code: def _build_item_inputs(self, train=True):
      super(VisualBPR, self)._build_item_inputs(train)
      if train:
          self._add_input(
              name="p_item_vfeature",
              dtype="float32",
              shape=[self._batch_size, self._item_f_source.shape[1]],
          )
          self._add_input(
              name="n_item_vfeature",
              dtype="float32",
              shape=[self._batch_size, self._item_f_source.shape[1]],
          )
      else:
          self._add_input(
              name="item_id", dtype="int32", shape=[None], train=False
          )
          self._add_input(
              name="item_vfeature",
              dtype="float32",
              shape=[None, self._item_f_source.shape[1]],
              train=False,
          )
  
file_path: openrec/openrec/tf1/legacy/recommenders/visual_bpr.py
imports: from openrec.tf1.legacy.recommenders import BPR
  from openrec.tf1.legacy.modules.extractions import LatentFactor, MultiLayerFC
  from openrec.tf1.legacy.modules.fusions import Average
label_desc: Use image node_id 2 for calling the VisualBPR obj's underlying member method code with example usage: obj._build_item_inputs(train) without return types