code: def _build_item_extractions(self, train=True):
      if train:
          self._add_module(
              "p_item_lf",
              LatentFactor(
                  init="normal",
                  l2_reg=self._l2_reg,
                  ids=self._get_input("p_item_id"),
                  shape=[
                      self._max_item,
                      self._dim_embed - self._dim_ve,
                  ],
                  scope="item",
                  reuse=False,
              ),
          )
          self._add_module(
              "p_item_vf",
              MultiLayerFC(
                  in_tensor=self._get_input("p_item_vfeature"),
                  dims=[self._dim_ve],
                  scope="item_MLP",
                  reuse=False,
              ),
          )
          self._add_module(
              "p_item_bias",
              LatentFactor(
                  l2_reg=self._l2_reg,
                  init="zero",
                  ids=self._get_input("p_item_id"),
                  shape=[self._max_item, 1],
                  scope="item_bias",
                  reuse=False,
              ),
          )
          self._add_module(
              "n_item_lf",
              LatentFactor(
                  init="normal",
                  l2_reg=self._l2_reg,
                  ids=self._get_input("n_item_id"),
                  shape=[
                      self._max_item,
                      self._dim_embed - self._dim_ve,
                  ],
                  scope="item",
                  reuse=True,
              ),
          )
          self._add_module(
              "n_item_vf",
              MultiLayerFC(
                  in_tensor=self._get_input("n_item_vfeature"),
                  dims=[self._dim_ve],
                  scope="item_MLP",
                  reuse=True,
              ),
          )
          self._add_module(
              "n_item_bias",
              LatentFactor(
                  l2_reg=self._l2_reg,
                  init="zero",
                  ids=self._get_input("n_item_id"),
                  shape=[self._max_item, 1],
                  scope="item_bias",
                  reuse=True,
              ),
          )
      else:
          self._add_module(
              "item_lf",
              LatentFactor(
                  init="normal",
                  l2_reg=self._l2_reg,
                  ids=self._get_input("item_id", train=train),
                  shape=[
                      self._max_item,
                      self._dim_embed - self._dim_ve,
                  ],
                  scope="item",
                  reuse=True,
              ),
              train=False,
          )
          self._add_module(
              "item_vf",
              MultiLayerFC(
                  in_tensor=self._get_input(
                      "item_vfeature", train=train
                  ),
                  dims=[self._dim_ve],
                  scope="item_MLP",
                  reuse=True,
              ),
              train=False,
          )
          self._add_module(
              "item_bias",
              LatentFactor(
                  l2_reg=self._l2_reg,
                  init="zero",
                  ids=self._get_input("item_id", train=train),
                  shape=[self._max_item, 1],
                  scope="item_bias",
                  reuse=True,
              ),
              train=False,
          )
  
file_path: openrec/openrec/tf1/legacy/recommenders/concat_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 Concat
label_desc: Use image node_id 4 for calling the ConcatVisualBPR obj's underlying member method code with example usage: obj._build_item_extractions(train) without return types