class_docstr: Collaborative Deep Ranking.
  
  Parameters
  ----------
  k: int, optional, default: 50
      The dimension of the latent factors.
  
  max_iter: int, optional, default: 100
      Maximum number of iterations or the number of epochs for SGD.
  
  autoencoder_structure: list, default: None
      The number of neurons of encoder/decoder layer for SDAE.
      For example, autoencoder_structure = [200], the SDAE structure will be [vocab_size, 200, k, 200, vocab_size]
  
  act_fn: str, default: 'relu'
      Name of the activation function used for the auto-encoder.
      Supported functions: ['sigmoid', 'tanh', 'elu', 'relu', 'relu6', 'leaky_relu', 'identity']
  
  learning_rate: float, optional, default: 0.001
      The learning rate for AdamOptimizer.
  
  lambda_u: float, optional, default: 0.1
      The regularization parameter for users.
  
  lambda_v: float, optional, default: 10
      The regularization parameter for items.
  
  lambda_w: float, optional, default: 0.1
      The regularization parameter for SDAE weights.
  
  lambda_n: float, optional, default: 1000
      The regularization parameter for SDAE output.
  
  corruption_rate: float, optional, default: 0.3
      The corruption ratio for SDAE.
  
  dropout_rate: float, optional, default: 0.1
      The probability that each element is removed in dropout of SDAE.
  
  batch_size: int, optional, default: 128
      The batch size for SGD.
  
  name: string, optional, default: 'CDR'
      The name of the recommender model.
  
  trainable: boolean, optional, default: True
      When False, the model is not trained and Cornac assumes that the model already
      pre-trained (U and V are not None).
  
  init_params: dictionary, optional, default: None
      List of initial parameters, e.g., init_params = {'U':U, 'V':V}
  
      U: ndarray, shape (n_users,k)
          The user latent factors, optional initialization via init_params.
      V: ndarray, shape (n_items,k)
          The item latent factors, optional initialization via init_params.
  
  seed: int, optional, default: None
      Random seed for weight initialization.
  
  References
  ----------
  Collaborative Deep Ranking: A Hybrid Pair-Wise Recommendation Algorithm with Implicit Feedback
  Ying H., Chen L., Xiong Y., Wu J. (2016)
class_docstr_tok: ["Collaborative","Deep","Ranking",".","Parameters","--","--","--","--","--","k",":","int",",","optional",",","default",":","50","The","dimension","of","the","latent","factors",".","max_iter",":","int",",","optional",",","default",":","100","Maximum","number","of","iterations","or","the","number","of","epochs","for","SGD",".","autoencoder_structure",":","list",",","default",":","None","The","number","of","neurons","of","encoder\/decoder","layer","for","SDAE",".","For","example",",","autoencoder_structure","=","[","200","]",",","the","SDAE","structure","will","be","[","vocab_size",",","200",",","k",",","200",",","vocab_size","]","act_fn",":","str",",","default",":","'relu'","Name","of","the","activation","function","used","for","the","auto-encoder",".","Supported","functions",":","[","'sigmoid","'",",","'tanh","'",",","'elu","'",",","'relu","'",",","'relu6","'",",","'leaky_relu","'",",","'identity","'","]","learning_rate",":","float",",","optional",",","default",":","0.001","The","learning","rate","for","AdamOptimizer",".","lambda_u",":","float",",","optional",",","default",":","0.1","The","regularization","parameter","for","users",".","lambda_v",":","float",",","optional",",","default",":","10","The","regularization","parameter","for","items",".","lambda_w",":","float",",","optional",",","default",":","0.1","The","regularization","parameter","for","SDAE","weights",".","lambda_n",":","float",",","optional",",","default",":","1000","The","regularization","parameter","for","SDAE","output",".","corruption_rate",":","float",",","optional",",","default",":","0.3","The","corruption","ratio","for","SDAE",".","dropout_rate",":","float",",","optional",",","default",":","0.1","The","probability","that","each","element","is","removed","in","dropout","of","SDAE",".","batch_size",":","int",",","optional",",","default",":","128","The","batch","size","for","SGD",".","name",":","string",",","optional",",","default",":","'CDR'","The","name","of","the","recommender","model",".","trainable",":","boolean",",","optional",",","default",":","True","When","False",",","the","model","is","not","trained","and","Cornac","assumes","that","the","model","already","pre-trained","(","U","and","V","are","not","None",")",".","init_params",":","dictionary",",","optional",",","default",":","None","List","of","initial","parameters",",","e.g.",",","init_params","=","{","'","U","'",":","U",",","'","V","'",":","V","}","U",":","ndarray",",","shape","(","n_users",",","k",")","The","user","latent","factors",",","optional","initialization","via","init_params",".","V",":","ndarray",",","shape","(","n_items",",","k",")","The","item","latent","factors",",","optional","initialization","via","init_params",".","seed",":","int",",","optional",",","default",":","None","Random","seed","for","weight","initialization",".","References","--","--","--","--","--","Collaborative","Deep","Ranking",":","A","Hybrid","Pair-Wise","Recommendation","Algorithm","with","Implicit","Feedback","Ying","H.",",","Chen","L.",",","Xiong","Y.",",","Wu","J",".","(","2016",")"]
code: def _fit_cdr(self, train_set):
      import tensorflow.compat.v1 as tf
      from .cdr import Model
  
      tf.disable_eager_execution()
  
      text_feature = train_set.item_text.batch_bow(
          np.arange(self.num_items)
      )  # bag of word feature
      text_feature = (text_feature - text_feature.min()) / (
          text_feature.max() - text_feature.min()
      )  # normalization
  
      # Build model
      layer_sizes = (
          [self.vocab_size]
          + self.autoencoder_structure
          + [self.k]
          + self.autoencoder_structure
          + [self.vocab_size]
      )
      tf.set_random_seed(self.seed)
      model = Model(
          n_users=self.num_users,
          n_items=self.num_items,
          n_vocab=self.vocab_size,
          k=self.k,
          layers=layer_sizes,
          lambda_u=self.lambda_u,
          lambda_v=self.lambda_v,
          lambda_w=self.lambda_w,
          lambda_n=self.lambda_n,
          lr=self.learning_rate,
          dropout_rate=self.dropout_rate,
          U=self.U,
          V=self.V,
          act_fn=self.act_fn,
          seed=self.seed,
      )
  
      # Training model
      config = tf.ConfigProto()
      config.gpu_options.allow_growth = True
      with tf.Session(config=config) as sess:
          sess.run(tf.global_variables_initializer())
  
          loop = trange(self.max_iter, disable=not self.verbose)
          for _ in loop:
              corruption_mask = self.rng.binomial(
                  1,
                  1 - self.corruption_rate,
                  (self.num_items, self.vocab_size),
              )
              sum_loss = 0
              count = 0
              batch_count = 0
              for batch_u, batch_i, batch_j in train_set.uij_iter(
                  batch_size=self.batch_size, shuffle=True
              ):
                  feed_dict = {
                      model.mask_input: corruption_mask[batch_i, :],
                      model.text_input: text_feature[batch_i, :],
                      model.batch_u: batch_u,
                      model.batch_i: batch_i,
                      model.batch_j: batch_j,
                  }
  
                  sess.run(model.opt1, feed_dict)  # train U, V
                  _, _loss = sess.run(
                      [model.opt2, model.loss], feed_dict
                  )  # train SDAE
  
                  sum_loss += _loss
                  count += len(batch_u)
                  batch_count += 1
                  if batch_count % 10 == 0:
                      loop.set_postfix(loss=(sum_loss / count))
  
          self.U, self.V = sess.run([model.U, model.V])
  
      tf.reset_default_graph()
  
      if self.verbose:
          print("\nLearning completed")
  
file_path: cornac/cornac/models/cdr/recom_cdr.py
imports: import numpy
  from tqdm.auto import trange
  from ..recommender import Recommender
  from ..recommender import ANNMixin, MEASURE_DOT
  from ...exception import ScoreException
  from ...utils import get_rng
  from ...utils.init_utils import xavier_uniform
label_desc: Use image node_id 4 for calling the CDR obj's underlying member method code with example usage: obj._fit_cdr(train_set) without return types