class_docstr: Multinomial Variational Autoencoders (Multi-VAE) for Collaborative Filtering implementation
  
  :Citation:
  
      Liang, Dawen, et al. "Variational autoencoders for collaborative filtering."
      Proceedings of the 2018 World Wide Web Conference. 2018.
      https://arxiv.org/pdf/1802.05814.pdf
docstr: Build and compile model.
code: def _create_model(self):
      """Build and compile model."""
      # Encoding
      self.x = Input(shape=(self.original_dim,))
      self.x_ = Lambda(lambda x: K.l2_normalize(x, axis=1))(self.x)
      self.dropout_encoder = Dropout(self.drop_encoder)(self.x_)
  
      self.h = Dense(
          self.intermediate_dim,
          activation="tanh",
          kernel_initializer=tf.compat.v1.keras.initializers.glorot_uniform(
              seed=self.seed
          ),
          bias_initializer=tf.compat.v1.keras.initializers.truncated_normal(
              stddev=0.001, seed=self.seed
          ),
      )(self.dropout_encoder)
      self.z_mean = Dense(self.latent_dim)(self.h)
      self.z_log_var = Dense(self.latent_dim)(self.h)
  
      # Sampling
      self.z = Lambda(
          self._take_sample, output_shape=(self.latent_dim,)
      )([self.z_mean, self.z_log_var])
  
      # Decoding
      self.h_decoder = Dense(
          self.intermediate_dim,
          activation="tanh",
          kernel_initializer=tf.compat.v1.keras.initializers.glorot_uniform(
              seed=self.seed
          ),
          bias_initializer=tf.compat.v1.keras.initializers.truncated_normal(
              stddev=0.001, seed=self.seed
          ),
      )
      self.dropout_decoder = Dropout(self.drop_decoder)
      self.x_bar = Dense(self.original_dim)
      self.h_decoded = self.h_decoder(self.z)
      self.h_decoded_ = self.dropout_decoder(self.h_decoded)
      self.x_decoded = self.x_bar(self.h_decoded_)
  
      # Training
      self.model = Model(self.x, self.x_decoded)
      self.model.compile(
          optimizer=tf.keras.optimizers.legacy.Adam(
              learning_rate=0.001
          ),
          loss=self._get_vae_loss,
      )
  
imports: import numpy
  import matplotlib.pyplot
  import seaborn
  from recommenders.evaluation.python_evaluation import ndcg_at_k
  import tensorflow
  from tensorflow.keras.layers import *
  from tensorflow.keras.models import Model
  from tensorflow.keras import backend
  from tensorflow.keras.callbacks import ReduceLROnPlateau, Callback
label_desc: Use image node_id 2 for calling the Mult_VAE obj's underlying member method code with example usage: obj._create_model() without return types