PoincareVAE

This module is the implementation of a Poincaré Disk Variational Autoencoder (https://arxiv.org/abs/1901.06033).

Available samplers

PoincareDiskSampler

Sampling from the Poincaré Disk using either a Wrapped Riemannian or Riemannian Gaussian distribution.

NormalSampler

Samples from a Standard normal distribution in the Autoencoder’s latent space.

GaussianMixtureSampler

Fits a Gaussian Mixture in the Autoencoder’s latent space.

TwoStageVAESampler

Fits a second VAE in the Autoencoder’s latent space.

MAFSampler

Fits a Masked Autoregressive Flow in the Autoencoder’s latent space.

IAFSampler

Fits an Inverse Autoregressive Flow in the Autoencoder’s latent space.

class pythae.models.PoincareVAEConfig(input_dim=None, latent_dim=10, uses_default_encoder=True, uses_default_decoder=True, reconstruction_loss='mse', prior_distribution='wrapped_normal', posterior_distribution='wrapped_normal', curvature=1)[source]

Poincaré VAE config class.

Parameters
  • input_dim (tuple) – The input_data dimension.

  • latent_dim (int) – The latent space dimension. Default: None.

  • reconstruction_loss (str) – The reconstruction loss to use [‘bce’, ‘mse’]. Default: ‘mse’

  • prior_distribution (str) – The distribution to use as prior [“wrapped_normal”, “riemannian_normal”]. Default: “wrapped_normal”

  • posterior_distribution (str) – The distribution to use as posterior [“wrapped_normal”, “riemannian_normal”]. Default: “wrapped_normal”

  • curvature (int) – The curvature of the manifold. Default: 1

class pythae.models.PoincareVAE(model_config, encoder=None, decoder=None)[source]

Poincaré Variational Autoencoder model.

Parameters
  • model_config (PoincareVAEConfig) – The Poincaré Variational Autoencoder configuration setting the main parameters of the model.

  • encoder (BaseEncoder) – An instance of BaseEncoder (inheriting from torch.nn.Module which plays the role of encoder. This argument allows you to use your own neural networks architectures if desired. If None is provided, a simple Multi Layer Preception (https://en.wikipedia.org/wiki/Multilayer_perceptron) is used. Default: None.

  • decoder (BaseDecoder) – An instance of BaseDecoder (inheriting from torch.nn.Module which plays the role of decoder. This argument allows you to use your own neural networks architectures if desired. If None is provided, a simple Multi Layer Preception (https://en.wikipedia.org/wiki/Multilayer_perceptron) is used. Default: None.

Note

For high dimensional data we advice you to provide you own network architectures. With the provided MLP you may end up with a MemoryError.

forward(inputs, **kwargs)[source]

The VAE model

Parameters

inputs (BaseDataset) – The training dataset with labels

Returns

An instance of ModelOutput containing all the relevant parameters

Return type

ModelOutput

get_nll(data, n_samples=1, batch_size=100)[source]

Function computed the estimate negative log-likelihood of the model. It uses importance sampling method with the approximate posterior distribution. This may take a while.

Parameters
  • data (torch.Tensor) – The input data from which the log-likelihood should be estimated. Data must be of shape [Batch x n_channels x …]

  • n_samples (int) – The number of importance samples to use for estimation

  • batch_size (int) – The batchsize to use to avoid memory issues

interpolate(starting_inputs, ending_inputs, granularity=10)[source]

This function performs a geodesic interpolation in the poincaré disk of the autoencoder from starting inputs to ending inputs. It returns the interpolation trajectories.

Parameters
  • starting_inputs (torch.Tensor) – The starting inputs in the interpolation of shape [B x input_dim]

  • ending_inputs (torch.Tensor) – The starting inputs in the interpolation of shape [B x input_dim]

  • granularity (int) – The granularity of the interpolation.

Returns

A tensor of shape [B x granularity x input_dim] containing the interpolation trajectories.

Return type

torch.Tensor