class_docstr: This class encapsulates the parameters (neural networks) and models & guides needed to train a
  semi-supervised variational auto-encoder on the MNIST image dataset
  
  :param output_size: size of the tensor representing the class label (10 for MNIST since
                      we represent the class labels as a one-hot vector with 10 components)
  :param input_size: size of the tensor representing the image (28*28 = 784 for our MNIST dataset
                     since we flatten the images and scale the pixels to be in [0,1])
  :param z_dim: size of the tensor representing the latent random variable z
                (handwriting style for our MNIST dataset)
  :param hidden_layers: a tuple (or list) of MLP layers to be used in the neural networks
                        representing the parameters of the distributions in our model
  :param use_cuda: use GPUs for faster training
  :param aux_loss_multiplier: the multiplier to use with the auxiliary loss
code: def __init__(
      self,
      output_size=10,
      input_size=784,
      z_dim=50,
      hidden_layers=(500,),
      config_enum=None,
      use_cuda=False,
      aux_loss_multiplier=None,
  ):
      super().__init__()
  
      # initialize the class with all arguments provided to the constructor
      self.output_size = output_size
      self.input_size = input_size
      self.z_dim = z_dim
      self.hidden_layers = hidden_layers
      self.allow_broadcast = config_enum == "parallel"
      self.use_cuda = use_cuda
      self.aux_loss_multiplier = aux_loss_multiplier
  
      # define and instantiate the neural networks representing
      # the parameters of various distributions in the model
      self.setup_networks()
  
imports: import argparse
  import torch
  import torch.nn
  from utils.custom_mlp import MLP, Exp
  from utils.mnist_cached import MNISTCached, mkdir_p, setup_data_loaders
  from utils.vae_plots import mnist_test_tsne_ssvae, plot_conditional_samples_ssvae
  from visdom import Visdom
  import pyro
  import pyro.distributions
  from pyro.contrib.examples.util import print_and_log
  from pyro.infer import SVI, JitTrace_ELBO, JitTraceEnum_ELBO, Trace_ELBO, TraceEnum_ELBO, config_enumerate
  from pyro.optim import Adam
label_desc: Use image node_id 1 to create a new SSVAE object from inherited base classes: nn with example: obj = SSVAE(output_size, input_size, z_dim, hidden_layers, config_enum, use_cuda, aux_loss_multiplier)