class_docstr: MultiVAE is an item-based collaborative filtering model that simultaneously ranks all items for each user.
  
  We implement the MultiVAE model with only user dataloader.
code: def __init__(self, config, dataset):
      super(MultiVAE, self).__init__(config, dataset)
  
      self.layers = config["mlp_hidden_size"]
      self.lat_dim = config["latent_dimension"]
      self.drop_out = config["dropout_prob"]
      self.anneal_cap = config["anneal_cap"]
      self.total_anneal_steps = config["total_anneal_steps"]
  
      self.build_histroy_items(dataset)
  
      self.update = 0
  
      self.encode_layer_dims = (
          [self.n_items] + self.layers + [self.lat_dim]
      )
      self.decode_layer_dims = [
          int(self.lat_dim / 2)
      ] + self.encode_layer_dims[::-1][1:]
  
      self.encoder = self.mlp_layers(self.encode_layer_dims)
      self.decoder = self.mlp_layers(self.decode_layer_dims)
  
      # parameters initialization
      self.apply(xavier_normal_initialization)
  
file_path: RecBole/recbole/model/general_recommender/multivae.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  from recbole.model.abstract_recommender import AutoEncoderMixin, GeneralRecommender
  from recbole.model.init import xavier_normal_initialization
  from recbole.utils import InputType
label_desc: Use image node_id 1 to create a new MultiVAE object from inherited base classes: GeneralRecommender, AutoEncoderMixin with example: obj = MultiVAE(config, dataset)