code: def _build_graph(self):
      self.ratings = tf.placeholder(
          dtype=tf.float32,
          shape=[self.n_users, None],
          name="rating_input",
      )
      self.C = tf.placeholder(
          dtype=tf.float32, shape=[self.n_users, None], name="C_input"
      )
      self.item_ids = tf.placeholder(dtype=tf.int32)
      with tf.variable_scope("CF_Variable"):
          self.U = tf.get_variable(
              name="U", dtype=tf.float32, initializer=self.U_init
          )
          self.V = tf.get_variable(
              name="V", dtype=tf.float32, initializer=self.V_init
          )
  
      V_batch = tf.reshape(
          tf.gather(self.V, self.item_ids), shape=[-1, self.k]
      )
  
      predictions = tf.matmul(self.U, V_batch, transpose_b=True)
      squared_error = tf.square(self.ratings - predictions)
      loss_1 = tf.reduce_sum(tf.multiply(self.C, squared_error))
      loss_2 = self.lambda_u * tf.nn.l2_loss(
          self.U
      ) + self.lambda_v * tf.nn.l2_loss(V_batch)
  
      self.loss = loss_1 + loss_2
      # Generate optimizer
      optimizer = tf.train.AdamOptimizer(self.lr)
  
      gvs = optimizer.compute_gradients(
          self.loss, var_list=tf.trainable_variables()
      )
      capped_gvs = [
          (tf.clip_by_value(grad, -5.0, 5.0), var) for grad, var in gvs
      ]
      self.opt = optimizer.apply_gradients(capped_gvs)
  
label_desc: Use image node_id 2 for calling the Model obj's underlying member method code with example usage: obj._build_graph() without return types