def main(args):
  mnist = get_dataset(os.path.join(DATA_DIR, 'MNIST'))

  def get_batch_generator(batch_size):
    while True:
      X_batch, _ = mnist.train.next_batch(batch_size)
      yield process_X(X_batch)

  batch_generator = get_batch_generator(args.batch_size)

  bijectors = get_bijectors(
      layers=[args.n_perceptrons for _ in range(args.n_bijectors)],
      kernel_initializer=GlorotInitializer(scale=args.scale))

  vae = VAE(ambient_dim=(28 * 28),
            latent_dim=args.latent_dim,
            # Make it shallow and easy to train
            decoder_layers=[int(_) for _ in args.decoder_layers.split(',')],
            encoder_layers=[int(_) for _ in args.encoder_layers.split(',')],
            bijectors=bijectors)

  logdir = os.path.join(DATA_DIR, args.log)

  sess_config = tf.ConfigProto()
  if args.gpus:
    sess_config.gpu_options.visible_device_list = args.gpus

  test_case = TestInfoTransit(args.batch_size, vae, batch_generator,
                              logdir=logdir, sess_config=sess_config)

  test_case.main(n_iters=args.n_iters, skip_step=args.skip_step)
import os
import numpy as np
import tensorflow as tf
from tfutils.distribution import get_entropy
from genmod.utils.mnist.data import get_dataset
from genmod.vae.test_base import VAE, TestVAE

# For reproducibility
SEED = 123
np.random.seed(SEED)  # pylint: disable=E1101
tf.set_random_seed(SEED)

# For data
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = os.path.join(SCRIPT_PATH, '../../dat/')
MNIST = get_dataset(os.path.join(DATA_DIR, 'MNIST'))


class BayesianAspect(object):
    def __init__(self, batch_size, vae, n_data, label):
        assert batch_size <= n_data
        self.batch_size = batch_size
        self.vae = vae
        self.n_data = n_data
        self.label = label

        self.training_data = self.get_training_data(n_data, label)

        self.test_vae = TestVAE(batch_size=batch_size,
                                vae=vae,
                                batch_generator=self.get_batch_generator())