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
docstr: The guide corresponds to the following:
  q(y|x) = categorical(alpha(x))              # infer digit from an image
  q(z|x,y) = normal(loc(x,y),scale(x,y))       # infer handwriting style from an image and the digit
  loc, scale are given by a neural network `encoder_z`
  alpha is given by a neural network `encoder_y`
  
  :param xs: a batch of scaled vectors of pixels from an image
  :param ys: (optional) a batch of the class labels i.e.
             the digit corresponding to the image(s)
  :return: None
docstr_tok: ["The","guide","corresponds","to","the","following",":","q","(","y|x",")","=","categorical","(","alpha","(","x",")",")","#","infer","digit","from","an","image","q","(","z|x",",","y",")","=","normal","(","loc","(","x",",","y",")",",","scale","(","x",",","y",")",")","#","infer","handwriting","style","from","an","image","and","the","digit","loc",",","scale","are","given","by","a","neural","network","`","encoder_z","`","alpha","is","given","by","a","neural","network","`","encoder_y","`",":","param","xs",":","a","batch","of","scaled","vectors","of","pixels","from","an","image",":","param","ys",":","(","optional",")","a","batch","of","the","class","labels","i.e",".","the","digit","corresponding","to","the","image","(","s",")",":","return",":","None"]
code: def guide(self, xs, ys=None):
      """
      The guide corresponds to the following:
      q(y|x) = categorical(alpha(x))              # infer digit from an image
      q(z|x,y) = normal(loc(x,y),scale(x,y))       # infer handwriting style from an image and the digit
      loc, scale are given by a neural network `encoder_z`
      alpha is given by a neural network `encoder_y`
  
      :param xs: a batch of scaled vectors of pixels from an image
      :param ys: (optional) a batch of the class labels i.e.
                 the digit corresponding to the image(s)
      :return: None
      """
      # inform Pyro that the variables in the batch of xs, ys are conditionally independent
      with pyro.plate("data"):
          # if the class label (the digit) is not supervised, sample
          # (and score) the digit with the variational distribution
          # q(y|x) = categorical(alpha(x))
          if ys is None:
              alpha = self.encoder_y(xs)
              ys = pyro.sample("y", dist.OneHotCategorical(alpha))
  
          # sample (and score) the latent handwriting-style with the variational
          # distribution q(z|x,y) = normal(loc(x,y),scale(x,y))
          loc, scale = self.encoder_z([xs, ys])
          pyro.sample("z", dist.Normal(loc, scale).to_event(1))
  
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 4 for calling the SSVAE obj's underlying member method code with example usage: obj.guide(xs, ys) without return types