def train_dense_latent_pong_no_batchnorm(beta):
    # inputs
    input_shape = (1, 84, 84)
    epochs = 10
    batch_size = 1
    filters = 32
    kernel_size = 6
    pre_latent_size = 128
    latent_size = 32

    # define filename
    name = 'cvae_atari_dense_latent_pong_no_batchnorm_beta_' + str(beta)

    # builder hyperparameter dictionary
    hp_dictionary = {
        'epochs': epochs,
        'batch_size': batch_size,
        'beta': beta,
        'filters': filters,
        'kernel_size': kernel_size,
        'loss': 'vae_loss',
        'optimizer': 'adam'
    }

    # define log directory
    log_dir = './summaries/' + experiment + '/' + utils.build_hyperparameter_string(name, hp_dictionary) + '/'

    # make VAE
    vae = DenseLatentPongNoBatchNorm(input_shape, 
                                    log_dir,
                                    filters=filters,
                                    kernel_size=kernel_size,
                                    pre_latent_size=pre_latent_size,
                                    latent_size=latent_size,
                                    beta=beta)

    # compile VAE
    from keras import optimizers
    optimizer = optimizers.Adam(lr=1e-3)
    vae.compile(optimizer=optimizer)

    # get dataset
    train_directory = './atari_agents/record/train/'
    test_directory = './atari_agents/record/test/'
    train_generator = utils.atari_generator(train_directory, batch_size=batch_size)
    test_generator = utils.atari_generator(test_directory, batch_size=batch_size)
    train_size = utils.count_images(train_directory)
    test_size = utils.count_images(test_directory)

    # print summaries
    vae.print_model_summaries()

    # fit VAE
    steps_per_epoch = int(train_size / batch_size)
    validation_steps = int(test_size / batch_size)
    vae.fit_generator(train_generator,
                   epochs=epochs,
                   steps_per_epoch=steps_per_epoch,
                   validation_data=test_generator,
                   validation_steps=validation_steps)
Ejemplo n.º 2
0
def train_entangled_pong_network():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    kernel_size = 6
    beta = 1.0  # entangled latent space
    epochs = 10
    batch_size = 1

    # define filename
    name = 'cvae_atari_entangled_pong'

    # builder hyperparameter dictionary
    hp_dictionary = {
        'epochs': epochs,
        'batch_size': batch_size,
        'beta': beta,
        'filters': filters,
        'kernel_size': kernel_size,
        'loss': 'vae_loss',
        'optimizer': 'adam'
    }

    # define log directory
    log_dir = './summaries/' + experiment + '/' + utils.build_hyperparameter_string(
        name, hp_dictionary) + '/'

    # make VAE
    vae = PongEntangledConvolutionalLatentVAE(input_shape,
                                              log_dir,
                                              filters=filters,
                                              kernel_size=kernel_size,
                                              beta=beta)

    # compile VAE
    from keras import optimizers
    optimizer = optimizers.Adam(lr=1e-1)
    vae.compile(optimizer=optimizer)

    # get dataset
    train_directory = './atari_agents/record/train/'
    test_directory = './atari_agents/record/test/'
    train_generator = utils.atari_generator(train_directory,
                                            batch_size=batch_size)
    test_generator = utils.atari_generator(test_directory,
                                           batch_size=batch_size)
    train_size = utils.count_images(train_directory)
    test_size = utils.count_images(test_directory)

    # print summaries
    vae.print_model_summaries()

    # fit VAE
    steps_per_epoch = int(train_size / batch_size)
    validation_steps = int(test_size / batch_size)
    vae.fit_generator(train_generator,
                      epochs=epochs,
                      steps_per_epoch=steps_per_epoch,
                      validation_data=test_generator,
                      validation_steps=validation_steps)
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    kernel_size = 6
    epochs = 20
    batch_size = 1

    # log directory
    run = 'cvae_atari_space_invaders_no_batch_norm_18_May_20_33_10_batch_size_1_beta_8_epochs_10_filters_32_kernel_size_6_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # define model
    vae = PongEntangledConvolutionalLatentNoBatchNormVAE(
        input_shape, log_dir, filters=filters, kernel_size=kernel_size)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1)
    X_test_size = 1000
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    sampling.encode_decode_sample(X_test, model)
def main():
    # inputs
    input_shape = (1, 84, 84)
    epochs = 10
    batch_size = 1
    filters = 32
    kernel_size = 6
    pre_latent_size = 512
    latent_size = 32

    # log directory
    run = 'cvae_atari_dense_latent_pong_no_batchnorm_beta_2_16_May_00_19_59_batch_size_1_beta_2_epochs_10_filters_32_kernel_size_6_loss_vae_loss_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = DenseLatentPongNoBatchNorm(input_shape,
                                     log_dir,
                                     filters=filters,
                                     kernel_size=kernel_size,
                                     pre_latent_size=pre_latent_size,
                                     latent_size=latent_size)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1)
    X_test_size = 100
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    sampling.encode_decode_sample(X_test, model)

    # plot filters
    # sampling.show_convolutional_layers(X_test, encoder, 8, 8)

    # sample from prior
    # sampling.decode_prior_samples(5, decoder, latent_shape=(1, 32))

    # sample from posterior
    # num_iter = 100
    # sampling.sample_posterior(X_test, model, num_iter, show_every=1)

    latent_shape = (1, latent_size)
    latent_index = 30
    sampling.change_latent_variable(latent_shape, latent_index, decoder)
Ejemplo n.º 5
0
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 10
    batch_size = 1
    lr = 1e-4
    img_channels = 1
    beta = 1.0

    # log directory
    run = 'cvae_atari_average_filter_18_Jun_20_23_05_batch_size_1_beta_1_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    # run = 'cvae_atari_average_filter_18_Jun_22_25_44_batch_size_1_beta_2_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    # run = 'cvae_atari_average_filter_19_Jun_00_24_43_batch_size_1_beta_4_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = IndiscriminateDecoupling(input_shape, 
                                log_dir,
                                filters=filters,
                                latent_filters=latent_filters,
                                kernel_size=kernel_size,
                                img_channels=img_channels,
                                beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1, shuffle=False)
    X_test_size = 1000
    X_test = np.asarray([next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    # for sample_number in range(4):
        # sampling.encode_decode_sample(X_test, model, sample_number=sample_number, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/indiscriminate_decoupling/', base='beta_4_')
    # plt.show()

    # plot filters
    # sampling.show_convolutional_layers(X_test, encoder, 2, 4, init_sample_num=3, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/indiscriminate_decoupling/', base='beta_4_')
    # plt.show()

    # sample from prior
    sampling.decode_prior_samples(5, decoder, latent_shape=(1, 8, 8, 8), save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/indiscriminate_decoupling/', base='beta_1_')
Ejemplo n.º 6
0
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 10
    batch_size = 1
    lr = 1e-4
    beta = 1.0

    # log directory
    run = 'cvae_atari_28_May_16_14_52_batch_size_1_beta_1_epochs_12_filters_32_kernel_size_7_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = ConvolutionalLatentAverageFilterShallowVAE(
        input_shape,
        log_dir,
        filters=filters,
        latent_filters=latent_filters,
        kernel_size=kernel_size,
        beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory,
                                           batch_size=1,
                                           shuffle=False)
    X_test_size = 330
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    sampling.encode_decode_sample(X_test, model)
    plt.show()
Ejemplo n.º 7
0
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 10
    batch_size = 1
    lr = 1e-4
    img_channels = 1
    beta = 1.0

    # log directory
    run = 'weighted_average_filter_19_Jun_04_15_36_batch_size_1_beta_1_epochs_10_filters_32_img_channels_3_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = WeightedAverageFilters(input_shape,
                                 log_dir,
                                 filters=filters,
                                 latent_filters=latent_filters,
                                 kernel_size=kernel_size,
                                 img_channels=img_channels,
                                 beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1)
    X_test_size = 1000
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    sampling.encode_decode_sample(X_test, model)
    plt.show()
def main():
    # inputs
    input_shape = (1, 84, 84)
    epochs = 10
    batch_size = 1
    beta = 1.0
    filters = 32
    kernel_size = 6
    pre_latent_size = 512
    latent_size = 32

    # log directory
    experiment = 'experiment_optimal_network_dense_latent_pong'
    run = 'cvae_atari_dense_latent_pong_reconstruction_only_15_May_15_50_14_batch_size_1_beta_0.0_epochs_20_filters_32_kernel_size_6_loss_vae_loss_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # define model
    vae = DenseLatentPong(input_shape,
                          log_dir,
                          filters=filters,
                          kernel_size=kernel_size,
                          pre_latent_size=pre_latent_size,
                          latent_size=latent_size,
                          beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1)
    X_test_size = 100
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    sampling.encode_decode_sample(X_test, model)
Ejemplo n.º 9
0
def train_average_filter(beta):
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 7
    epochs = 12
    batch_size = 1
    lr = 1e-4

    # define filename
    name = 'cvae_atari'

    # builder hyperparameter dictionary
    hp_dictionary = {
        'epochs': epochs,
        'batch_size': batch_size,
        'beta': beta,
        'filters': filters,
        'latent_filters': latent_filters,
        'kernel_size': kernel_size,
        'lr': lr,
        'loss': 'vae_loss',
        'optimizer': 'adam'
    }

    # define log directory
    log_dir = './summaries/' + experiment + '/' + utils.build_hyperparameter_string(
        name, hp_dictionary) + '/'

    # make VAE
    vae = ConvolutionalLatentAverageFilterShallowVAE(
        input_shape,
        log_dir,
        filters=filters,
        latent_filters=latent_filters,
        kernel_size=kernel_size,
        beta=beta)

    # compile VAE
    from keras import optimizers
    optimizer = optimizers.Adam(lr=lr)
    vae.compile(optimizer=optimizer)

    # get dataset
    train_directory = './atari_agents/record/train/'
    test_directory = './atari_agents/record/test/'
    train_generator = utils.atari_generator(train_directory,
                                            batch_size=batch_size)
    test_generator = utils.atari_generator(test_directory,
                                           batch_size=batch_size)
    train_size = utils.count_images(train_directory)
    test_size = utils.count_images(test_directory)

    # print summaries
    vae.print_model_summaries()

    # fit VAE
    steps_per_epoch = int(train_size / batch_size)
    validation_steps = int(test_size / batch_size)
    vae.fit_generator(train_generator,
                      epochs=epochs,
                      steps_per_epoch=steps_per_epoch,
                      validation_data=test_generator,
                      validation_steps=validation_steps)
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 10
    batch_size = 1
    lr = 1e-4
    img_channels = 1
    beta = 1.0

    # log directory
    # run = 'cvae_atari_average_filter_18_Jun_15_40_50_batch_size_1_beta_1_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    # run = 'cvae_atari_average_filter_18_Jun_18_07_12_batch_size_1_beta_2_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    run = 'cvae_atari_average_filter_18_Jun_20_33_08_batch_size_1_beta_4_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = ConvolutionalLatentAverageFilterShallowVAE(input_shape, 
                                log_dir,
                                filters=filters,
                                latent_filters=latent_filters,
                                kernel_size=kernel_size,
                                img_channels=img_channels,
                                beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1, shuffle=False)
    X_test_size = 1000
    X_test = np.asarray([next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    # for sample_number in range(4):
        # sampling.encode_decode_sample(X_test, model, sample_number=sample_number, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/naive_average/', base='beta_4_')

    # plot filters
    # sampling.show_convolutional_layers(X_test, encoder, 2, 4, init_sample_num=3, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/naive_average/', base='beta_4_')
    # plt.show()

    # sample from prior
    # sampling.decode_prior_samples(5, decoder, latent_shape=(1, 8, 8, 8), save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/naive_average/', base='beta_4_')
    # plt.show()

    # sample from posterior
    # num_iter = 100
    # sampling.sample_posterior(X_test, model, num_iter, show_every=1, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/naive_average/', base='beta_4_')

    # change latent variable
    # latent_shape = (1, 8, 8, 8)
    # filter_index = 0
    # sampling.change_latent_filter(X_test,
    #                             latent_shape,
    #                             filter_index,
    #                             encoder,
    #                             decoder,
    #                             num_samples=10,
    #                             init_sample_num=0,
    #                             noise_factor=1.0,
    #                             std_dev=1.0,
    #                             mean=0.0)

    # plot mean activation over latent space
    sampling.plot_mean_latent_activation(X_test, encoder, 2, 4, threshold=True, threshold_val=0.1)
    plt.subplots_adjust(left=0.14, bottom=0.63, right=0.5, top=1, wspace=0.14, hspace=0)
    plt.savefig('/home/dane/Documents/Thesis/thesis/figures/results/naive_average/' + 'beta_4_' + 'average_activation' + '.png', bbox_inches='tight')
Ejemplo n.º 11
0
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 10
    batch_size = 1
    lr = 1e-4
    img_channels = 1
    beta = 1.0

    # log directory
    run = 'cvae_atari_average_filter_19_Jun_05_05_40_batch_size_1_beta_4_epochs_10_filters_32_img_channels_1_kernel_size_6_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = LatentImage(input_shape, 
                    log_dir,
                    filters=filters,
                    kernel_size=kernel_size,
                    img_channels=img_channels,
                    beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1, shuffle=False)
    X_test_size = 1000
    X_test = np.asarray([next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    for sample_number in range(4):
        sampling.encode_decode_sample(X_test, model, sample_number=sample_number, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/latent_image/', base='beta_4_')
    # plt.show()

    # plot filters
    # for sample_number in [30, 70, 10, 90]:
    #     plt.figure(1)
    #     plt.xticks([], [])
    #     plt.yticks([], [])
    #     plt.imshow(X_test[sample_number][0])
    #     plt.gray()
    #     plt.savefig('/home/dane/Documents/Thesis/thesis/figures/results/latent_image/beta_' + str(int(beta)) + '_sample_' + str(sample_number) + '_original.png', bbox_inches='tight')
    #     # plt.show()
    #     x_encoded = encoder.predict(np.asarray([X_test[sample_number]]))  # shape (1, num_filters, width, height)
    #     x_encoded = x_encoded[0]  # shape (num_filters, width, height)
    #     plt.figure(2)
    #     plt.xticks([], [])
    #     plt.yticks([], [])
    #     plt.imshow(x_encoded[0])
    #     plt.gray()
    #     plt.savefig('/home/dane/Documents/Thesis/thesis/figures/results/latent_image/beta_' + str(int(beta)) + '_sample_' + str(sample_number) + '_latent.png', bbox_inches='tight')
    # plt.show()

    # sample from prior
    # sampling.decode_prior_samples(4, decoder, latent_shape=(1, 1, 8, 8), save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/latent_image/', base='beta_1_')
    # plt.show()

    # sample from posterior
    # num_iter = 1000
    # sampling.sample_posterior(X_test, model, num_iter, show_every=1, save=True, save_path='/home/dane/Documents/Thesis/thesis/figures/results/latent_image/', base='beta_1_')

    # change latent variable
    # latent_shape = (1, 8, 8, 8)
    # filter_index = 0
    # sampling.change_latent_filter(X_test,
    #                             latent_shape,
    #                             filter_index,
    #                             encoder,
    #                             decoder,
    #                             num_samples=10,
    #                             init_sample_num=0,
    #                             noise_factor=1.0,
    #                             std_dev=1.0,
    #                             mean=0.0)

    # plot mean activation over latent space
    sampling.plot_mean_latent_activation(X_test, encoder, 1, 1)
    plt.savefig('/home/dane/Documents/Thesis/thesis/figures/results/latent_image/' + 'beta_1_' + 'average_activation' + '.png', bbox_inches='tight')
Ejemplo n.º 12
0
vae = FreyVAE((1, 28, 20), log_dir)

# load weights
encoder = vae.load_model()

# extract models
model = vae.get_model()
decoder = vae.get_decoder()
encoder = vae.get_encoder()
'''
Load data
'''
dataset = 'frey'
if dataset == 'atari':
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory, batch_size=1)
    X_test_size = 100
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])
elif dataset == 'mnist':
    # import dataset
    (_, _), (X_test, _) = utils.load_keras()
elif dataset == 'frey':
    # import dataset
    (_, _), (X_test, _) = utils.load_frey()
else:
    print("Dataset not found.")
'''
Sampling functions
'''
def train_winner_takes_all(beta):
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 6
    epochs = 5
    batch_size = 1
    lr = 1e-4
    img_channels = 1

    # define filename
    name = 'cvae_atari_winner_takes_all'

    # builder hyperparameter dictionary
    hp_dictionary = {
        'epochs': epochs,
        'batch_size': batch_size,
        'beta': beta,
        'filters': filters,
        'latent_filters': latent_filters,
        'kernel_size': kernel_size,
        'img_channels': img_channels,
        'lr': lr,
        'loss': 'vae_loss',
        'optimizer': 'adam'
    }

    # define log directory
    log_dir = '/vol/bitbucket/dgs13/summaries/' + experiment + '/' + utils.build_hyperparameter_string(
        name, hp_dictionary) + '/'

    # make VAE
    vae = WinnerTakesAll(input_shape,
                         log_dir,
                         filters=filters,
                         latent_filters=latent_filters,
                         kernel_size=kernel_size,
                         img_channels=img_channels,
                         beta=beta)

    # compile VAE
    from keras import optimizers
    optimizer = optimizers.Adam(lr=lr)
    vae.compile(optimizer=optimizer)

    # get dataset
    train_directory = '/vol/bitbucket/dgs13/record/train/'
    test_directory = '/vol/bitbucket/dgs13/record/test/'
    train_generator = utils.atari_generator(train_directory,
                                            batch_size=batch_size,
                                            img_channels=img_channels)
    test_generator = utils.atari_generator(test_directory,
                                           batch_size=batch_size,
                                           img_channels=img_channels)
    train_size = utils.count_images(train_directory)
    test_size = utils.count_images(test_directory)

    # print summaries
    vae.print_model_summaries()

    # fit VAE
    steps_per_epoch = int(train_size / batch_size)
    validation_steps = int(test_size / batch_size)
    vae.fit_generator(train_generator,
                      epochs=epochs,
                      steps_per_epoch=steps_per_epoch,
                      validation_data=test_generator,
                      validation_steps=validation_steps)
def main():
    # inputs
    input_shape = (1, 84, 84)
    filters = 32
    latent_filters = 8
    kernel_size = 7
    epochs = 10
    batch_size = 1
    lr = 1e-4
    beta = 1.0

    # log directory
    run = 'cvae_atari_average_filter_30_May_20_46_38_batch_size_1_beta_128_epochs_5_filters_32_kernel_size_7_latent_filters_8_loss_vae_loss_lr_0.0001_optimizer_adam'
    log_dir = './summaries/' + experiment + '/' + run + '/'

    # make VAE
    vae = ConvolutionalLatentAverageFilterShallowVAE(
        input_shape,
        log_dir,
        filters=filters,
        latent_filters=latent_filters,
        kernel_size=kernel_size,
        beta=beta)

    # load weights
    vae.load_model()

    # extract models
    model = vae.get_model()
    decoder = vae.get_decoder()
    encoder = vae.get_encoder()

    # load testing data
    test_directory = './atari_agents/record/test/'
    test_generator = utils.atari_generator(test_directory,
                                           batch_size=1,
                                           shuffle=False)
    X_test_size = 1113
    X_test = np.asarray(
        [next(test_generator)[0][0] for i in range(X_test_size)])

    # show original and reconstruction
    # sampling.encode_decode_sample(X_test, model)
    # plt.show()

    # plot filters
    # sampling.show_convolutional_layers(X_test, encoder, 4, 2, threshold=True, threshold_val=0.0)
    # plt.show()

    # sample from prior
    # sampling.decode_prior_samples(5, decoder, latent_shape=(1, 8, 7, 7))
    # plt.show()

    # sample from posterior
    # num_iter = 100
    # sampling.sample_posterior(X_test, model, num_iter, show_every=1)

    # change latent variable
    # latent_shape = (1, 8, 7, 7)
    # filter_index = 1
    # sampling.change_latent_filter(X_test,
    #                             latent_shape,
    #                             filter_index,
    #                             encoder,
    #                             decoder,
    #                             num_samples=10,
    #                             init_sample_num=0,
    #                             noise_factor=1.0,
    #                             std_dev=1.0,
    #                             mean=0.0)

    # plot mean activation over latent space
    sampling.plot_mean_latent_activation(X_test,
                                         encoder,
                                         4,
                                         2,
                                         threshold=True,
                                         threshold_val=0.0)
    plt.show()