1. autoencode
from __future__ import division, print_function, absolute_import import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #%matplotlib inline # Import MNIST data from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) # Parameters learning_rate = 0.01 training_epochs = 20 batch_size = 256 display_step = 1 examples_to_show = 10 # Network Parameters n_hidden_1 = 256 # 1st layer num features n_hidden_2 = 128 # 2nd layer num features n_input = 784 # MNIST data input (img shape: 28*28) # tf Graph input (only pictures) X = tf.placeholder("float", [None, n_input]) weights = { 'encoder_h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'encoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'decoder_h1': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_1])), 'decoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_input])), } biases = { 'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])), 'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])), 'decoder_b1': tf.Variable(tf.random_normal([n_hidden_1])), 'decoder_b2': tf.Variable(tf.random_normal([n_input])), } # Building the encoder def encoder(x): # Encoder Hidden layer with sigmoid activation #1 layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']), biases['encoder_b1'])) # Decoder Hidden layer with sigmoid activation #2 layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']), biases['encoder_b2'])) return layer_2 # Building the decoder def decoder(x): # Encoder Hidden layer with sigmoid activation #1 layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']), biases['decoder_b1'])) # Decoder Hidden layer with sigmoid activation #2 layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']), biases['decoder_b2'])) return layer_2 # Construct model encoder_op = encoder(X) decoder_op = decoder(encoder_op) # Prediction y_pred = decoder_op # Targets (Labels) are the input data. y_true = X # Define loss and optimizer, minimize the squared error cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2)) optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost) # Initializing the variables init = tf.global_variables_initializer() # Launch the graph with tf.Session() as sess: sess.run(init) total_batch = int(mnist.train.num_examples/batch_size) # Training cycle for epoch in range(training_epochs): # Loop over all batches for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) # Run optimization op (backprop) and cost op (to get loss value) _, c = sess.run([optimizer, cost], feed_dict={X: batch_xs}) # Display logs per epoch step if epoch % display_step == 0: print("Epoch:", 'd' % (epoch+1), "cost=", "{:.9f}".format(c)) print("Optimization Finished!") # Applying encode and decode over test set encode_decode = sess.run( y_pred, feed_dict={X: mnist.test.images[:examples_to_show]}) # Compare original images with their reconstructions f, a = plt.subplots(2, 10, figsize=(10, 2)) for i in range(examples_to_show): a[0][i].imshow(np.reshape(mnist.test.images[i], (28, 28))) a[1][i].imshow(np.reshape(encode_decode[i], (28, 28))) plt.show(f) plt.draw() plt.waitforbuttonpress()
Extracting /tmp/data/train-images-idx3-ubyte.gz Extracting /tmp/data/train-labels-idx1-ubyte.gz Extracting /tmp/data/t10k-images-idx3-ubyte.gz Extracting /tmp/data/t10k-labels-idx1-ubyte.gz Epoch: 0001 cost= 0.202572390 Epoch: 0002 cost= 0.170586497 Epoch: 0003 cost= 0.147145674 Epoch: 0004 cost= 0.134183317 Epoch: 0005 cost= 0.129831925 Epoch: 0006 cost= 0.125962004 Epoch: 0007 cost= 0.118559957 Epoch: 0008 cost= 0.112685442 Epoch: 0009 cost= 0.109631285 Epoch: 0010 cost= 0.105650857 Epoch: 0011 cost= 0.103282064 Epoch: 0012 cost= 0.101963483 Epoch: 0013 cost= 0.099665105 Epoch: 0014 cost= 0.100522719 Epoch: 0015 cost= 0.097489521 Epoch: 0016 cost= 0.093438946 Epoch: 0017 cost= 0.093155362 Epoch: 0018 cost= 0.091413260 Epoch: 0019 cost= 0.090430483 Epoch: 0020 cost= 0.090419836 Optimization Finished! <matplotlib.figure.Figure at 0x7fcb187e0278> /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py:402: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure "matplotlib is currently using a non-GUI backend, " --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-14-ebd2d41d806d> in <module>() 108 plt.show(f) 109 plt.draw() --> 110 plt.waitforbuttonpress() /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py in waitforbuttonpress(*args, **kwargs) 724 If *timeout* is negative, does not timeout. 725 """ --> 726 return gcf().waitforbuttonpress(*args, **kwargs) 727 728 /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/figure.py in waitforbuttonpress(self, timeout) 1681 1682 blocking_input = BlockingKeyMouseInput(self) -> 1683 return blocking_input(timeout=timeout) 1684 1685 def get_default_bbox_extra_artists(self): /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/blocking_input.py in __call__(self, timeout) 374 """ 375 self.keyormouse = None --> 376 BlockingInput.__call__(self, n=1, timeout=timeout) 377 378 return self.keyormouse /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/blocking_input.py in __call__(self, n, timeout) 115 try: 116 # Start event loop --> 117 self.fig.canvas.start_event_loop(timeout=timeout) 118 finally: # Run even on exception like ctrl-c 119 # Disconnect the callbacks /home/wgb/anaconda3/lib/python3.6/site-packages/matplotlib/backend_bases.py in start_event_loop(self, timeout) 2412 This is implemented only for backends with GUIs. 2413 """ -> 2414 raise NotImplementedError 2415 2416 def stop_event_loop(self): NotImplementedError: