├── Adversarial Variational Bayes ├── avb.py ├── out │ ├── 000.png │ ├── 001.png │ ├── 002.png │ ├── 003.png │ ├── 004.png │ ├── 005.png │ ├── 006.png │ ├── 007.png │ ├── 008.png │ ├── 009.png │ ├── 010.png │ ├── 011.png │ ├── 012.png │ ├── 013.png │ ├── 014.png │ ├── 015.png │ ├── 016.png │ ├── 017.png │ ├── 018.png │ ├── 019.png │ ├── 020.png │ ├── 021.png │ ├── 022.png │ ├── 023.png │ ├── 024.png │ ├── 025.png │ ├── 026.png │ ├── 027.png │ ├── 028.png │ ├── 029.png │ ├── 030.png │ ├── 031.png │ ├── 032.png │ ├── 033.png │ ├── 034.png │ ├── 035.png │ ├── 036.png │ ├── 037.png │ ├── 038.png │ ├── 039.png │ ├── 040.png │ ├── 041.png │ ├── 042.png │ ├── 043.png │ ├── 044.png │ ├── 045.png │ ├── 046.png │ ├── 047.png │ ├── 048.png │ ├── 049.png │ ├── 050.png │ ├── 051.png │ ├── 052.png │ ├── 053.png │ ├── 054.png │ ├── 055.png │ ├── 056.png │ ├── 057.png │ ├── 058.png │ ├── 059.png │ ├── 060.png │ ├── 061.png │ ├── 062.png │ ├── 063.png │ ├── 064.png │ ├── 065.png │ ├── 066.png │ ├── 067.png │ ├── 068.png │ ├── 069.png │ ├── 070.png │ ├── 071.png │ ├── 072.png │ ├── 073.png │ ├── 074.png │ ├── 075.png │ ├── 076.png │ ├── 077.png │ ├── 078.png │ ├── 079.png │ ├── 080.png │ ├── 081.png │ ├── 082.png │ ├── 083.png │ ├── 084.png │ ├── 085.png │ ├── 086.png │ ├── 087.png │ └── 088.png └── out2 │ ├── 000.png │ ├── 001.png │ ├── 002.png │ ├── 003.png │ ├── 004.png │ ├── 005.png │ ├── 006.png │ ├── 007.png │ ├── 008.png │ ├── 009.png │ ├── 010.png │ ├── 011.png │ ├── 012.png │ ├── 013.png │ ├── 014.png │ ├── 015.png │ ├── 016.png │ ├── 017.png │ ├── 018.png │ ├── 019.png │ ├── 020.png │ ├── 021.png │ ├── 022.png │ ├── 023.png │ ├── 024.png │ ├── 025.png │ ├── 026.png │ ├── 027.png │ ├── 028.png │ ├── 029.png │ ├── 030.png │ ├── 031.png │ ├── 032.png │ ├── 033.png │ ├── 034.png │ ├── 035.png │ ├── 036.png │ ├── 037.png │ ├── 038.png │ ├── 039.png │ ├── 040.png │ ├── 041.png │ ├── 042.png │ ├── 043.png │ ├── 044.png │ ├── 045.png │ ├── 046.png │ ├── 047.png │ ├── 048.png │ ├── 049.png │ ├── 050.png │ ├── 051.png │ ├── 052.png │ ├── 053.png │ ├── 054.png │ ├── 055.png │ ├── 056.png │ ├── 057.png │ ├── 058.png │ ├── 059.png │ ├── 060.png │ ├── 061.png │ ├── 062.png │ ├── 063.png │ ├── 064.png │ ├── 065.png │ ├── 066.png │ ├── 067.png │ ├── 068.png │ └── 069.png ├── Autoencoder └── autoencoder_class.py ├── Generative adversarial network └── gan.py ├── README.md └── Variational Autoencoder ├── 000.png ├── 15_examples.png └── variationalautoencoder_class.py /Adversarial Variational Bayes/avb.py: -------------------------------------------------------------------------------- 1 | import matplotlib 2 | matplotlib.use('Agg') 3 | import tensorflow as tf 4 | import numpy as np 5 | import matplotlib.pyplot as plt 6 | import matplotlib.gridspec as gridspec 7 | import os 8 | from tensorflow.examples.tutorials.mnist import input_data 9 | slim = tf.contrib.slim 10 | ds = tf.contrib.distributions 11 | st = tf.contrib.bayesflow.stochastic_tensor 12 | 13 | # Reference: https://gist.github.com/poolio/b71eb943d6537d01f46e7b20e9225149 14 | 15 | mnist = input_data.read_data_sets('./mnist/', one_hot=True) 16 | mb_size = 100 17 | z_dim = 256 18 | eps_dim = mnist.train.images.shape[1] 19 | X_dim = mnist.train.images.shape[1] 20 | y_dim = mnist.train.labels.shape[1] 21 | h_dim = 200 22 | c = 0 23 | lr = 1e-3 24 | 25 | def plot(samples): 26 | fig = plt.figure(figsize=(4, 4)) 27 | gs = gridspec.GridSpec(4, 4) 28 | gs.update(wspace=0.05, hspace=0.05) 29 | 30 | for i, sample in enumerate(samples): 31 | ax = plt.subplot(gs[i]) 32 | plt.axis('off') 33 | ax.set_xticklabels([]) 34 | ax.set_yticklabels([]) 35 | ax.set_aspect('equal') 36 | plt.imshow(sample.reshape(28, 28), cmap='Greys_r') 37 | 38 | return fig 39 | 40 | 41 | def xavier_init(size): 42 | in_dim = size[0] 43 | xavier_stddev = 1. / tf.sqrt(in_dim / 2.) 44 | return tf.random_normal(shape=size, stddev=xavier_stddev) 45 | 46 | 47 | """ Q(z|X,eps) """ 48 | X = tf.placeholder(tf.float32, shape=[None, X_dim], name='X') 49 | eps = tf.placeholder(tf.float32, shape=[None, eps_dim], name='eps') 50 | X_eps = tf.placeholder(tf.float32, shape=[None, X_dim], name='X_eps') 51 | 52 | Q_W1 = tf.Variable(xavier_init([X_dim + eps_dim, h_dim])) 53 | Q_b1 = tf.Variable(tf.zeros(shape=[h_dim])) 54 | 55 | Q_W2 = tf.Variable(xavier_init([h_dim, z_dim])) 56 | Q_b2 = tf.Variable(tf.zeros(shape=[z_dim])) 57 | 58 | theta_Q = [Q_W1, Q_W2, Q_b1, Q_b2] 59 | 60 | def Q(X, eps): 61 | inputs = tf.concat([X, eps], 1) 62 | h = tf.nn.elu(tf.matmul(inputs, Q_W1) + Q_b1) 63 | z = tf.matmul(h, Q_W2) + Q_b2 64 | return z 65 | 66 | 67 | """ P(X|z) """ 68 | P_W1 = tf.Variable(xavier_init([z_dim, h_dim])) 69 | P_b1 = tf.Variable(tf.zeros(shape=[h_dim])) 70 | 71 | P_W2 = tf.Variable(xavier_init([h_dim, X_dim])) 72 | P_b2 = tf.Variable(tf.zeros(shape=[X_dim])) 73 | 74 | theta_P = [P_W1, P_W2, P_b1, P_b2] 75 | 76 | def P(z): 77 | h = tf.nn.elu(tf.matmul(z, P_W1) + P_b1) 78 | logits = tf.matmul(h, P_W2) + P_b2 79 | prob = tf.nn.sigmoid(logits) 80 | return prob 81 | 82 | 83 | """ D(z) """ 84 | D_W1 = tf.Variable(xavier_init([z_dim + eps_dim, h_dim])) 85 | D_b1 = tf.Variable(tf.zeros(shape=[h_dim])) 86 | 87 | D_W2 = tf.Variable(xavier_init([h_dim, 1])) 88 | D_b2 = tf.Variable(tf.zeros(shape=[1])) 89 | 90 | theta_D = [D_W1, D_W2, D_b1, D_b2] 91 | 92 | # Assumed to be good 93 | def D(X, z): 94 | h = tf.nn.elu(tf.matmul(tf.concat([X, z], 1), D_W1) + D_b1) 95 | out = tf.matmul(h, D_W2) + D_b2 96 | return out 97 | 98 | 99 | """ Training """ 100 | z_sample = Q(X, eps) 101 | z_sample_fake = Q(X_eps, eps) 102 | p_prob = P(z_sample) 103 | 104 | X_samples = P(z_sample_fake) 105 | 106 | # Adversarial loss to approx. Q(z|X) 107 | D_real = D(X, z_sample) 108 | D_fake = D(X, z_sample_fake) 109 | 110 | G_loss = -(-tf.reduce_mean(D_real) + tf.reduce_mean(tf.log(p_prob))) 111 | g_psi = tf.reduce_mean( 112 | tf.nn.sigmoid_cross_entropy_with_logits(labels=D_real, logits=tf.ones_like(D_real)) + 113 | tf.nn.sigmoid_cross_entropy_with_logits(labels=D_fake, logits=tf.zeros_like(D_fake))) 114 | 115 | opt = tf.train.AdamOptimizer(1e-3, beta1=0.5) 116 | G_solver = opt.minimize(G_loss, var_list=theta_P + theta_Q) 117 | D_solver = opt.minimize(g_psi, var_list=theta_D) 118 | 119 | sess = tf.Session() 120 | sess.run(tf.global_variables_initializer()) 121 | 122 | if not os.path.exists('out/'): 123 | os.makedirs('out/') 124 | if not os.path.exists('out2/'): 125 | os.makedirs('out2/') 126 | 127 | #points_per_class = 300 128 | #labels = np.concatenate([[i] * points_per_class for i in xrange(params['input_dim'])]) 129 | #np_data = np.eye(params['input_dim'], dtype=np.float32)[labels] 130 | 131 | 132 | i = 0 133 | for it in range(1000000): 134 | X_mb, _ = mnist.train.next_batch(mb_size) 135 | eps_mb = np.random.randn(mb_size, eps_dim) 136 | z_mb = np.random.randn(mb_size, eps_dim) 137 | 138 | _, G_loss_curr = sess.run([G_solver, G_loss], 139 | feed_dict={X: X_mb, eps: eps_mb}) 140 | 141 | _, D_loss_curr = sess.run([D_solver, g_psi], 142 | feed_dict={X: X_mb, eps: eps_mb, X_eps: z_mb}) 143 | 144 | if it % 100 == 0: 145 | print('Iter: {}; G_loss: {:.4}; D_loss: {:.4}' 146 | .format(it, G_loss_curr, D_loss_curr)) 147 | eps_mb = np.random.randn(4, eps_dim) 148 | X_mb, _ = mnist.train.next_batch(4) 149 | 150 | samples = sess.run(X_samples, feed_dict={X_eps: np.random.randn(16, eps_dim), eps: np.random.randn(16, eps_dim)}) 151 | 152 | fig = plot(samples) 153 | plt.savefig('out/{}.png'.format(str(i).zfill(3)), bbox_inches='tight') 154 | plt.close(fig) 155 | 156 | reconstructed, latent_rep = sess.run([p_prob, z_sample], feed_dict={X: X_mb, eps: eps_mb}) 157 | n_examples = 4 158 | fig, axs = plt.subplots(3, n_examples, figsize=(4, 3)) 159 | for example_i in range(n_examples): 160 | axs[0][example_i].imshow( 161 | np.reshape(X_mb[example_i, :], (28, 28))) 162 | axs[1][example_i].imshow( 163 | np.reshape(latent_rep[example_i, :], (16,16))) 164 | axs[2][example_i].imshow( 165 | np.reshape([reconstructed[example_i, :]], (28, 28))) 166 | plt.savefig('out2/{}.png'.format(str(i).zfill(3)), bbox_inches='tight') 167 | plt.close(fig) 168 | i += 1 169 | -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/000.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/001.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/002.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/003.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/004.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/005.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/006.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/007.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/008.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/009.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/010.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/011.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/012.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/013.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/014.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/015.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/016.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/017.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/018.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/019.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/020.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/021.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/022.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/023.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/024.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/025.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/026.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/027.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/028.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/029.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/030.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/031.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/032.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/033.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/034.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/035.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/036.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/037.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/038.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/039.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/040.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/041.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/042.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/043.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/044.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/045.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/046.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/047.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/048.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/049.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/050.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/051.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/052.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/053.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/054.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/055.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/056.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/057.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/058.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/059.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/060.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/061.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/062.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/063.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/064.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/065.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/066.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/067.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/068.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/069.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/070.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/071.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/072.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/073.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/074.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/075.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/076.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/077.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/078.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/079.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/080.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/081.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/082.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/083.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/084.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/085.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/086.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/087.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out/088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out/088.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/000.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/001.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/002.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/003.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/004.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/005.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/006.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/007.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/008.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/009.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/010.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/011.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/012.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/013.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/014.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/015.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/016.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/017.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/018.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/019.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/020.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/021.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/022.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/023.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/024.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/025.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/026.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/027.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/028.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/029.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/030.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/031.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/032.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/033.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/034.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/035.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/036.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/037.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/038.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/039.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/040.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/041.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/042.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/043.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/044.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/045.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/046.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/047.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/048.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/049.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/050.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/051.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/052.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/053.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/054.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/055.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/056.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/057.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/058.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/059.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/060.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/061.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/062.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/063.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/064.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/065.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/066.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/067.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/068.png -------------------------------------------------------------------------------- /Adversarial Variational Bayes/out2/069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Adversarial Variational Bayes/out2/069.png -------------------------------------------------------------------------------- /Autoencoder/autoencoder_class.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | import numpy as np 3 | import tensorflow.examples.tutorials.mnist.input_data as input_data 4 | import matplotlib.pyplot as plt 5 | import functools 6 | 7 | # References 8 | # https://danijar.com/structuring-your-tensorflow-models/ 9 | # https://jmetzen.github.io/2015-11-27/vae.html 10 | 11 | def xavier_init(fan_in, fan_out, constant = 1): 12 | with tf.name_scope('xavier'): 13 | low = -constant * np.sqrt(6.0 / (fan_in + fan_out)) 14 | high = constant * np.sqrt(6.0 / (fan_in + fan_out)) 15 | return tf.random_uniform((fan_in, fan_out), 16 | minval = low, maxval = high, 17 | dtype = tf.float32) 18 | 19 | def doublewrap(function): 20 | """ 21 | A decorator decorator, allowing to use the decorator to be used without 22 | parentheses if not arguments are provided. All arguments must be optional. 23 | """ 24 | @functools.wraps(function) 25 | def decorator(*args, **kwargs): 26 | if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): 27 | return function(args[0]) 28 | else: 29 | return lambda wrapee: function(wrapee, *args, **kwargs) 30 | return decorator 31 | 32 | 33 | @doublewrap 34 | def define_scope(function, scope=None, *args, **kwargs): 35 | """ 36 | A decorator for functions that define TensorFlow operations. The wrapped 37 | function will only be executed once. Subsequent calls to it will directly 38 | return the result so that operations are added to the graph only once. 39 | The operations added by the function live within a tf.variable_scope(). If 40 | this decorator is used with arguments, they will be forwarded to the 41 | variable scope. The scope name defaults to the name of the wrapped 42 | function. 43 | """ 44 | attribute = '_cache_' + function.__name__ 45 | name = scope or function.__name__ 46 | @property 47 | @functools.wraps(function) 48 | def decorator(self): 49 | if not hasattr(self, attribute): 50 | with tf.variable_scope(name, *args, **kwargs): 51 | setattr(self, attribute, function(self)) 52 | return getattr(self, attribute) 53 | return decorator 54 | 55 | 56 | 57 | class Autoencoder: 58 | def __init__(self, image, enc_dimensions = [784, 500, 200, 64], dec_dimensions = [64, 200, 500, 784]): 59 | self.image = image 60 | self.enc_dimensions = enc_dimensions 61 | self.dec_dimensions = dec_dimensions 62 | self.prediction 63 | self.optimize 64 | self.error 65 | 66 | @define_scope 67 | def prediction(self, input = 4): 68 | current_input = self.image 69 | print('made it') 70 | # ENCODER 71 | encoder = [] 72 | with tf.name_scope('Encoder'): 73 | for layer_i, n_output in enumerate(self.enc_dimensions[1:]): 74 | with tf.name_scope('enc_layer' + str(layer_i)): 75 | n_input = int(current_input.get_shape()[1]) 76 | W = tf.Variable(xavier_init(n_input, n_output), name = 'weight'+str(layer_i)) 77 | b = tf.Variable(tf.zeros(shape=(1, n_output)), name = 'bias'+str(layer_i)) 78 | encoder.append(W) 79 | current_input = tf.nn.elu(tf.add(tf.matmul(current_input, W), b), 80 | name='enclayer' + str(layer_i)) 81 | 82 | # DECODER 83 | with tf.name_scope('Decoder'): 84 | for layer_i, n_output in enumerate(self.dec_dimensions[1:]): 85 | with tf.name_scope('dec_layer' + str(layer_i)): 86 | n_input = int(current_input.get_shape()[1]) 87 | W = tf.Variable(xavier_init(n_input, n_output), name = 'weight'+str(layer_i)) 88 | b = tf.Variable(tf.zeros(shape=(1, n_output)), name = 'bias'+str(layer_i)) 89 | encoder.append(W) 90 | current_input = tf.nn.elu(tf.add(tf.matmul(current_input, W), b), 91 | name='declayer' + str(layer_i)) 92 | 93 | return current_input 94 | 95 | @define_scope 96 | def optimize(self): 97 | optimizer = tf.train.AdamOptimizer(learning_rate=0.001) 98 | return optimizer.minimize(self.error) 99 | 100 | @define_scope 101 | def error(self): 102 | error = tf.reduce_sum(tf.pow(tf.sub(self.prediction, self.image), 2)) 103 | tf.summary.scalar('error', error) 104 | return error 105 | 106 | def main(): 107 | mnist = input_data.read_data_sets('./mnist/', one_hot=True) 108 | mean_img = np.mean(mnist.train.images, axis=0) 109 | image = tf.placeholder(tf.float32, [None, 784]) 110 | autoencoder = Autoencoder(image) 111 | 112 | merged_summary = tf.summary.merge_all() 113 | sess = tf.Session() 114 | logpath = '/tmp/tensorflow_logs/example/1' 115 | test_writer = tf.summary.FileWriter(logpath, graph=tf.get_default_graph()) 116 | #train_writer = tf.summary.FileWriter('/train') 117 | sess.run(tf.global_variables_initializer()) 118 | 119 | for epoch_i in range(1): 120 | test_images = mnist.test.images 121 | test = np.array([img - mean_img for img in test_images]) 122 | error, summary = sess.run(fetches=[autoencoder.error, merged_summary], feed_dict={image: test}) 123 | test_writer.add_summary(summary, epoch_i) 124 | print('Test error {:6.2f}'.format(error)) 125 | for batch_i in range(60): 126 | batch_xs, _ = mnist.train.next_batch(100) 127 | train = np.array([img-mean_img for img in batch_xs]) 128 | _, summary = sess.run(fetches=[autoencoder.optimize, merged_summary], feed_dict={image: train}) 129 | #train_writer.add_summary(summary, epoch_i) 130 | 131 | # Plot example reconstructions 132 | n_examples = 15 133 | test_xs, _ = mnist.test.next_batch(n_examples) 134 | test_xs_norm = np.array([img - mean_img for img in test_xs]) 135 | recon = sess.run(autoencoder.prediction, feed_dict={image: test_xs_norm}) 136 | fig, axs = plt.subplots(2, n_examples, figsize=(10, 2)) 137 | for example_i in range(n_examples): 138 | axs[0][example_i].imshow( 139 | np.reshape(test_xs[example_i, :], (28, 28))) 140 | axs[1][example_i].imshow( 141 | np.reshape([recon[example_i, :]], (28, 28))) 142 | fig.show() 143 | plt.draw() 144 | plt.waitforbuttonpress() 145 | 146 | if __name__ == '__main__': 147 | main() 148 | -------------------------------------------------------------------------------- /Generative adversarial network/gan.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | from tensorflow.examples.tutorials.mnist import input_data 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | import matplotlib.gridspec as gridspec 6 | import os 7 | 8 | # Ref: https://github.com/wiseodd/generative-models/blob/master/VAE/adversarial_vb/avb_tensorflow_v1.py 9 | 10 | def xavier_init(size): 11 | in_dim = size[0] 12 | xavier_stddev = 1. / tf.sqrt(in_dim / 2.) 13 | return tf.random_normal(shape=size, stddev=xavier_stddev) 14 | 15 | 16 | X = tf.placeholder(tf.float32, shape=[None, 784]) 17 | 18 | D_W1 = tf.Variable(xavier_init([784, 128])) 19 | D_b1 = tf.Variable(tf.zeros(shape=[128])) 20 | 21 | D_W2 = tf.Variable(xavier_init([128, 1])) 22 | D_b2 = tf.Variable(tf.zeros(shape=[1])) 23 | 24 | theta_D = [D_W1, D_W2, D_b1, D_b2] 25 | 26 | 27 | Z = tf.placeholder(tf.float32, shape=[None, 100]) 28 | 29 | G_W1 = tf.Variable(xavier_init([100, 128])) 30 | G_b1 = tf.Variable(tf.zeros(shape=[128])) 31 | 32 | G_W2 = tf.Variable(xavier_init([128, 784])) 33 | G_b2 = tf.Variable(tf.zeros(shape=[784])) 34 | 35 | theta_G = [G_W1, G_W2, G_b1, G_b2] 36 | 37 | 38 | def sample_Z(m, n): 39 | return np.random.uniform(-1., 1., size=[m, n]) 40 | 41 | 42 | def generator(z): 43 | G_h1 = tf.nn.relu(tf.matmul(z, G_W1) + G_b1) 44 | G_log_prob = tf.matmul(G_h1, G_W2) + G_b2 45 | G_prob = tf.nn.sigmoid(G_log_prob) 46 | 47 | return G_prob 48 | 49 | 50 | def discriminator(x): 51 | D_h1 = tf.nn.relu(tf.matmul(x, D_W1) + D_b1) 52 | D_logit = tf.matmul(D_h1, D_W2) + D_b2 53 | D_prob = tf.nn.sigmoid(D_logit) 54 | 55 | return D_prob, D_logit 56 | 57 | 58 | def plot(samples): 59 | fig = plt.figure(figsize=(4, 4)) 60 | gs = gridspec.GridSpec(4, 4) 61 | gs.update(wspace=0.05, hspace=0.05) 62 | 63 | for i, sample in enumerate(samples): 64 | ax = plt.subplot(gs[i]) 65 | plt.axis('off') 66 | ax.set_xticklabels([]) 67 | ax.set_yticklabels([]) 68 | ax.set_aspect('equal') 69 | plt.imshow(sample.reshape(28, 28), cmap='Greys_r') 70 | 71 | return fig 72 | 73 | 74 | G_sample = generator(Z) 75 | D_real, D_logit_real = discriminator(X) 76 | D_fake, D_logit_fake = discriminator(G_sample) 77 | 78 | # D_loss = -tf.reduce_mean(tf.log(D_real) + tf.log(1. - D_fake)) 79 | # G_loss = -tf.reduce_mean(tf.log(D_fake)) 80 | 81 | # Alternative losses: 82 | # ------------------- 83 | D_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(D_logit_real, tf.ones_like(D_logit_real))) 84 | D_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(D_logit_fake, tf.zeros_like(D_logit_fake))) 85 | D_loss = D_loss_real + D_loss_fake 86 | G_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(D_logit_fake, tf.ones_like(D_logit_fake))) 87 | 88 | D_solver = tf.train.AdamOptimizer().minimize(D_loss, var_list=theta_D) 89 | G_solver = tf.train.AdamOptimizer().minimize(G_loss, var_list=theta_G) 90 | 91 | mb_size = 128 92 | Z_dim = 100 93 | 94 | mnist = input_data.read_data_sets('../../MNIST_data', one_hot=True) 95 | 96 | sess = tf.Session() 97 | sess.run(tf.initialize_all_variables()) 98 | 99 | if not os.path.exists('out/'): 100 | os.makedirs('out/') 101 | 102 | i = 0 103 | 104 | for it in range(1000000): 105 | if it % 1000 == 0: 106 | samples = sess.run(G_sample, feed_dict={Z: sample_Z(16, Z_dim)}) 107 | 108 | fig = plot(samples) 109 | plt.savefig('out/{}.png'.format(str(i).zfill(3)), bbox_inches='tight') 110 | i += 1 111 | plt.close(fig) 112 | 113 | X_mb, _ = mnist.train.next_batch(mb_size) 114 | 115 | _, D_loss_curr = sess.run([D_solver, D_loss], feed_dict={X: X_mb, Z: sample_Z(mb_size, Z_dim)}) 116 | _, G_loss_curr = sess.run([G_solver, G_loss], feed_dict={Z: sample_Z(mb_size, Z_dim)}) 117 | 118 | if it % 1000 == 0: 119 | print('Iter: {}'.format(it)) 120 | print('D loss: {:.4}'. format(D_loss_curr)) 121 | print('G_loss: {:.4}'.format(G_loss_curr)) 122 | print() 123 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tensorflow-models 2 | 3 | Reference implementations for variational autoencoder, autoencoder, generative adversarial network and adversarial variational bayes I implemented in tensorflow. 4 | 5 | I managed to get them working for the autoencoder and variational autoencoder using the beautiful class structure described by Danijar [here.](https://danijar.com/structuring-your-tensorflow-models/) 6 | 7 | Input and reconstructions from the variational autoencoder: 8 |

9 | 10 |

11 | 12 | Samples drawn from the latent space of the variational autoencoder and the corresponding reconstructions: 13 |

14 | 15 |

16 | 17 | To be done: 18 | - Adversarial Autoencoder 19 | -------------------------------------------------------------------------------- /Variational Autoencoder/000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Variational Autoencoder/000.png -------------------------------------------------------------------------------- /Variational Autoencoder/15_examples.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulienSiems/TensorFlow-Autoencoders/05074c712e109a9f3fb073d9c3e64c0bd7437eef/Variational Autoencoder/15_examples.png -------------------------------------------------------------------------------- /Variational Autoencoder/variationalautoencoder_class.py: -------------------------------------------------------------------------------- 1 | import matplotlib 2 | matplotlib.use('Agg') 3 | import tensorflow as tf 4 | import numpy as np 5 | import tensorflow.examples.tutorials.mnist.input_data as input_data 6 | import matplotlib.pyplot as plt 7 | import functools 8 | 9 | 10 | # References 11 | # https://danijar.com/structuring-your-tensorflow-models/ 12 | # https://jmetzen.github.io/2015-11-27/vae.html 13 | def xavier_init(fan_in, fan_out, constant = 1): 14 | with tf.name_scope('xavier'): 15 | low = -constant * np.sqrt(6.0 / (fan_in + fan_out)) 16 | high = constant * np.sqrt(6.0 / (fan_in + fan_out)) 17 | return tf.random_uniform((fan_in, fan_out), 18 | minval = low, maxval = high, 19 | dtype = tf.float32) 20 | 21 | def doublewrap(function): 22 | """ 23 | A decorator decorator, allowing to use the decorator to be used without 24 | parentheses if not arguments are provided. All arguments must be optional. 25 | """ 26 | @functools.wraps(function) 27 | def decorator(*args, **kwargs): 28 | if len(args) == 1 and len(kwargs) == 0 and callable(args[0]): 29 | return function(args[0]) 30 | else: 31 | return lambda wrapee: function(wrapee, *args, **kwargs) 32 | return decorator 33 | 34 | 35 | @doublewrap 36 | def define_scope(function, scope=None, *args, **kwargs): 37 | """ 38 | A decorator for functions that define TensorFlow operations. The wrapped 39 | function will only be executed once. Subsequent calls to it will directly 40 | return the result so that operations are added to the graph only once. 41 | The operations added by the function live within a tf.variable_scope(). If 42 | this decorator is used with arguments, they will be forwarded to the 43 | variable scope. The scope name defaults to the name of the wrapped 44 | function. 45 | """ 46 | attribute = '_cache_' + function.__name__ 47 | name = scope or function.__name__ 48 | @property 49 | @functools.wraps(function) 50 | def decorator(self): 51 | if not hasattr(self, attribute): 52 | with tf.variable_scope(name, *args, **kwargs): 53 | setattr(self, attribute, function(self)) 54 | return getattr(self, attribute) 55 | return decorator 56 | 57 | 58 | 59 | class VariationalAutoencoder: 60 | 61 | def __init__(self, image, enc_dimensions = [784, 500, 200, 64], dec_dimensions = [64, 200, 500, 784]): 62 | self.image = image 63 | self.enc_dimensions = enc_dimensions 64 | self.dec_dimensions = dec_dimensions 65 | self.latent = None 66 | self.prediction 67 | self.optimize 68 | self.error 69 | 70 | @define_scope 71 | def prediction(self): 72 | current_input = self.image 73 | 74 | # ENCODER 75 | encoder = [] 76 | with tf.name_scope('Encoder'): 77 | for layer_i, n_output in enumerate(self.enc_dimensions[1:-1]): 78 | with tf.name_scope('enc_layer' + str(layer_i)): 79 | n_input = int(current_input.get_shape()[1]) 80 | W = tf.Variable(xavier_init(n_input, n_output), name = 'weight'+str(layer_i)) 81 | b = tf.Variable(tf.zeros(shape=(1, n_output)), name = 'bias'+str(layer_i)) 82 | encoder.append(W) 83 | current_input = tf.nn.elu(tf.add(tf.matmul(current_input, W), b), 84 | name='enclayer' + str(layer_i)) 85 | 86 | # Latent layer 87 | with tf.name_scope('LatentLayer'): 88 | n_input = int(current_input.get_shape()[1]) 89 | 90 | with tf.name_scope('mu_layer'): 91 | mu_weight = tf.Variable(xavier_init(n_input, self.enc_dimensions[-1]), name = 'mu_weight') 92 | mu_bias = tf.Variable(tf.zeros(shape=(1, self.enc_dimensions[-1])), name = 'mu_bias') 93 | self.mu = tf.add(tf.matmul(current_input, mu_weight), mu_bias, name = 'mu') 94 | #tf.summary.image('mu', self.mu) 95 | 96 | with tf.name_scope('logvar_layer'): 97 | logvar_weight = tf.Variable(xavier_init(n_input, self.enc_dimensions[-1]), name = 'logvar_weight') 98 | logvar_bias = tf.Variable(tf.zeros(shape=(1, self.enc_dimensions[-1])), name = 'logvar_bias') 99 | self.logvar = tf.add(tf.matmul(current_input, logvar_weight), logvar_bias, name ='logvar') 100 | #tf.summary.image('logvar', self.logvar) 101 | 102 | eps = tf.random_normal(shape=(1, self.enc_dimensions[-1]), name = 'gaussian_noise') 103 | 104 | self.latent = tf.add(self.mu, tf.multiply(tf.sqrt(tf.exp(self.logvar)), eps), name ='hidden_layer') 105 | current_input = self.latent 106 | 107 | # DECODER 108 | with tf.name_scope('Decoder'): 109 | for layer_i, n_output in enumerate(self.dec_dimensions[1:]): 110 | with tf.name_scope('dec_layer' + str(layer_i)): 111 | n_input = int(current_input.get_shape()[1]) 112 | W = tf.Variable(xavier_init(n_input, n_output), name = 'weight'+str(layer_i)) 113 | b = tf.Variable(tf.zeros(shape=(1, n_output)), name = 'bias'+str(layer_i)) 114 | encoder.append(W) 115 | current_input = tf.nn.elu(tf.add(tf.matmul(current_input, W), b), 116 | name='decclayer' + str(layer_i)) 117 | 118 | return current_input 119 | 120 | @define_scope 121 | def optimize(self): 122 | optimizer = tf.train.AdamOptimizer(learning_rate=0.001) 123 | return optimizer.minimize(self.error) 124 | 125 | @define_scope 126 | def error(self): 127 | '''# latent loss 128 | self.latent_loss = -1/2*tf.reduce_sum(1 + tf.log(tf.square(tf.exp(self.logvar))) - tf.square(self.mu) - tf.square(tf.exp(self.logvar)), name = 'latent_loss') 129 | self.reconstruction_error = tf.reduce_sum(tf.pow(tf.sub(self.prediction, self.image), 2), name = 'reconstruction_loss')/ (28*28) 130 | loss = tf.reduce_mean(self.latent_loss + self.reconstruction_error) 131 | tf.summary.scalar('loss', loss) 132 | return loss''' 133 | self.reconstr_error = tf.reduce_sum(tf.pow(tf.subtract(self.prediction, self.image), 2)) 134 | self.latent_loss = -1/2*tf.reduce_sum(1 + self.logvar - tf.square(self.mu) - tf.exp(self.logvar), name = 'latent_loss') 135 | self.loss = self.reconstr_error + self.latent_loss 136 | tf.summary.scalar('error', self.loss) 137 | return self.loss 138 | 139 | def main(): 140 | mnist = input_data.read_data_sets('./mnist/', one_hot=True) 141 | mean_img = np.mean(mnist.train.images, axis=0) 142 | image = tf.placeholder(tf.float32, [None, 784]) 143 | model = VariationalAutoencoder(image) 144 | 145 | merged_summary = tf.summary.merge_all() 146 | sess = tf.Session() 147 | logpath = '/tmp/tensorflow_logs/vae/1' 148 | test_writer = tf.summary.FileWriter(logpath, graph=tf.get_default_graph()) 149 | #train_writer = tf.summary.FileWriter('/train') 150 | sess.run(tf.global_variables_initializer()) 151 | 152 | for epoch_i in range(200): 153 | test_images = mnist.test.images 154 | test = np.array([img - mean_img for img in test_images]) 155 | error, summary = sess.run(fetches=[model.error, merged_summary], feed_dict={image: test_images}) 156 | recerror = sess.run(fetches=model.reconstr_error, feed_dict={image:test_images}) 157 | print(recerror) 158 | test_writer.add_summary(summary, epoch_i) 159 | print('Test error {:6.2f}'.format(error)) 160 | for batch_i in range(60): 161 | batch_xs, _ = mnist.train.next_batch(100) 162 | train = np.array([img-mean_img for img in batch_xs]) 163 | _, summary = sess.run(fetches=[model.optimize, merged_summary], feed_dict={image: batch_xs}) 164 | #train_writer.add_summary(summary, epoch_i) 165 | 166 | # Plot example reconstructions 167 | n_examples = 15 168 | test_xs, _ = mnist.test.next_batch(n_examples) 169 | test_xs_norm = np.array([img - mean_img for img in test_xs]) 170 | recon = sess.run(model.prediction, feed_dict={image: test_xs}) 171 | fig, axs = plt.subplots(2, n_examples, figsize=(10, 2)) 172 | for example_i in range(n_examples): 173 | axs[0][example_i].imshow( 174 | np.reshape(test_xs[example_i, :], (28, 28))) 175 | axs[1][example_i].imshow( 176 | np.reshape([recon[example_i, :]], (28, 28))) 177 | plt.draw() 178 | plt.savefig('15_examples_1.png') 179 | plt.close(fig) 180 | #plt.waitforbuttonpress() 181 | 182 | n_examples = 15 183 | test_xs = np.random.normal(size=(n_examples, 64)) 184 | recon = sess.run(model.prediction, feed_dict={model.latent: test_xs}) 185 | fig, axs = plt.subplots(2, n_examples, figsize=(10, 2)) 186 | for example_i in range(n_examples): 187 | axs[0][example_i].imshow( 188 | np.reshape(test_xs[example_i, :], (8, 8))) 189 | axs[1][example_i].imshow( 190 | np.reshape([recon[example_i, :]], (28, 28))) 191 | plt.draw() 192 | plt.savefig('15_examples.png') 193 | plt.close(fig) 194 | #plt.waitforbuttonpress() 195 | 196 | 197 | if __name__ == '__main__': 198 | main() --------------------------------------------------------------------------------