class_docstr: xDeepFM model
  
  :Citation:
  
      J. Lian, X. Zhou, F. Zhang, Z. Chen, X. Xie, G. Sun, "xDeepFM: Combining Explicit
      and Implicit Feature Interactions for Recommender Systems", in Proceedings of the
      24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining,
      KDD 2018, London, 2018.
docstr: Construct the MLP part for the model.
  This components provides implicit higher-order feature interactions.
  
  Args:
      embed_out (object): The output of field-embedding layer. This is the input for DNN.
      embed_layer_size (object): Shape of the embed_out
  
  Returns:
      object: Prediction score made by fast CIN.
code: def _build_dnn(self, embed_out, embed_layer_size):
      """Construct the MLP part for the model.
      This components provides implicit higher-order feature interactions.
  
      Args:
          embed_out (object): The output of field-embedding layer. This is the input for DNN.
          embed_layer_size (object): Shape of the embed_out
  
      Returns:
          object: Prediction score made by fast CIN.
      """
      hparams = self.hparams
      w_fm_nn_input = embed_out
      last_layer_size = embed_layer_size
      layer_idx = 0
      hidden_nn_layers = []
      hidden_nn_layers.append(w_fm_nn_input)
      with tf.compat.v1.variable_scope(
          "nn_part", initializer=self.initializer
      ) as scope:
          for idx, layer_size in enumerate(hparams.layer_sizes):
              curr_w_nn_layer = tf.compat.v1.get_variable(
                  name="w_nn_layer" + str(layer_idx),
                  shape=[last_layer_size, layer_size],
                  dtype=tf.float32,
              )
              curr_b_nn_layer = tf.compat.v1.get_variable(
                  name="b_nn_layer" + str(layer_idx),
                  shape=[layer_size],
                  dtype=tf.float32,
                  initializer=tf.compat.v1.zeros_initializer(),
              )
              tf.compat.v1.summary.histogram(
                  "nn_part/" + "w_nn_layer" + str(layer_idx),
                  curr_w_nn_layer,
              )
              tf.compat.v1.summary.histogram(
                  "nn_part/" + "b_nn_layer" + str(layer_idx),
                  curr_b_nn_layer,
              )
              curr_hidden_nn_layer = tf.compat.v1.nn.xw_plus_b(
                  hidden_nn_layers[layer_idx],
                  curr_w_nn_layer,
                  curr_b_nn_layer,
              )
              scope = "nn_part" + str(idx)  # noqa: F841
              activation = hparams.activation[idx]
  
              if hparams.enable_BN is True:
                  curr_hidden_nn_layer = (
                      tf.compat.v1.layers.batch_normalization(
                          curr_hidden_nn_layer,
                          momentum=0.95,
                          epsilon=0.0001,
                          training=self.is_train_stage,
                      )
                  )
  
              curr_hidden_nn_layer = self._active_layer(
                  logit=curr_hidden_nn_layer,
                  activation=activation,
                  layer_idx=idx,
              )
              hidden_nn_layers.append(curr_hidden_nn_layer)
              layer_idx += 1
              last_layer_size = layer_size
              self.layer_params.append(curr_w_nn_layer)
              self.layer_params.append(curr_b_nn_layer)
  
          w_nn_output = tf.compat.v1.get_variable(
              name="w_nn_output",
              shape=[last_layer_size, 1],
              dtype=tf.float32,
          )
          b_nn_output = tf.compat.v1.get_variable(
              name="b_nn_output",
              shape=[1],
              dtype=tf.float32,
              initializer=tf.compat.v1.zeros_initializer(),
          )
          tf.compat.v1.summary.histogram(
              "nn_part/" + "w_nn_output" + str(layer_idx), w_nn_output
          )
          tf.compat.v1.summary.histogram(
              "nn_part/" + "b_nn_output" + str(layer_idx), b_nn_output
          )
          self.layer_params.append(w_nn_output)
          self.layer_params.append(b_nn_output)
          nn_output = tf.compat.v1.nn.xw_plus_b(
              hidden_nn_layers[-1], w_nn_output, b_nn_output
          )
          return nn_output
  
file_path: recommenders/recommenders/models/deeprec/models/xDeepFM.py
imports: import numpy
  import tensorflow
  from recommenders.models.deeprec.models.base_model import BaseModel
label_desc: Use image node_id 7 for calling the XDeepFMModel obj's underlying member method code with example usage: obj._build_dnn(embed_out, embed_layer_size) and returns: nn_output