In [12]:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

import tensorflow as tf
sess = tf.InteractiveSession()


def weightVariables(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def biasVariable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

def maxPool2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

def main():
    '''PlaceHolders'''
    # Input
    x = tf.placeholder(tf.float32, shape=[None, 784])
    # Target
    y_ = tf.placeholder(tf.float32, shape=[None, 10])

    
    #  First Convolutional Layer
    wConv1 = weightVariables([5, 5, 1, 32])
    bConv1 = biasVariable([32])
    xImage = tf.reshape(x, [-1, 28, 28, 1])
    hConv1 = tf.nn.relu(conv2d(xImage, wConv1) + bConv1)
    hPool1 = maxPool2x2(hConv1)
    # Ouput : 14 * 14
    
    #  Second Convolutional Layer
    wConv2 = weightVariables([5, 5, 32, 64])
    bConv2 = biasVariable([64])
    hConv2 = tf.nn.relu(conv2d(hPool1, wConv2) + bConv2)
    hPool2 = maxPool2x2(hConv2)
    # Output : 7 * 7
    
    # Densely Connected Layer
    wFC1 = weightVariables([7 * 7 * 64, 1024])
    bFC1 = biasVariable([1024])
    hPool2Flat = tf.reshape(hPool2, [-1, 7*7*64])
    hFC1 = tf.nn.relu(tf.matmul(hPool2Flat, wFC1) + bFC1)
    
    # Dropout
    keep_prob = tf.placeholder(tf.float32)
    hFC1Drop = tf.nn.dropout(hFC1, keep_prob)
    
    wFC2 = weightVariables([1024, 10])
    bFC2 = biasVariable([10])
    
    yConv = tf.matmul(hFC1Drop, wFC2) + bFC2
    
    
    #  Train ans evaluate the model:
    crossEntropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=yConv))
    trainStep = tf.train.AdamOptimizer(1e-4).minimize(crossEntropy)
    
    correctPrediction = tf.equal(tf.argmax(yConv, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correctPrediction, tf.float32))
    
    sess.run(tf.global_variables_initializer())
    
    for i in range(20000):
        batch = mnist.train.next_batch(50)
        if i%100 == 0:
            trainAccuracy = accuracy.eval(feed_dict={
                x: batch[0], y_: batch[1], keep_prob: 1.0 
            })
            print("Step : %d, training accuracy : %g"%(i, trainAccuracy))
            
        trainStep.run(feed_dict={
            x: batch[0], y_: batch[1], keep_prob: 0.5
        })
        
    print("Test Accuracy : %g"%accuracy.eval(feed_dict={
        x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0
    }))


if __name__ == '__main__':
    main()


Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
Step : 0, training accuracy : 0.04
Step : 100, training accuracy : 0.78
Step : 200, training accuracy : 0.92
Step : 300, training accuracy : 0.92
Step : 400, training accuracy : 0.98
Step : 500, training accuracy : 0.92
Step : 600, training accuracy : 0.98
Step : 700, training accuracy : 0.98
Step : 800, training accuracy : 0.88
Step : 900, training accuracy : 1
Step : 1000, training accuracy : 0.96
Step : 1100, training accuracy : 0.94
Step : 1200, training accuracy : 0.94
Step : 1300, training accuracy : 0.98
Step : 1400, training accuracy : 0.98
Step : 1500, training accuracy : 0.94
Step : 1600, training accuracy : 0.98
Step : 1700, training accuracy : 1
Step : 1800, training accuracy : 1
Step : 1900, training accuracy : 1
Step : 2000, training accuracy : 0.98
Step : 2100, training accuracy : 1
Step : 2200, training accuracy : 0.96
Step : 2300, training accuracy : 0.98
Step : 2400, training accuracy : 1
Step : 2500, training accuracy : 1
Step : 2600, training accuracy : 0.96
Step : 2700, training accuracy : 0.98
Step : 2800, training accuracy : 0.96
Step : 2900, training accuracy : 1
Step : 3000, training accuracy : 1
Step : 3100, training accuracy : 0.98
Step : 3200, training accuracy : 1
Step : 3300, training accuracy : 1
Step : 3400, training accuracy : 1
Step : 3500, training accuracy : 1
Step : 3600, training accuracy : 0.98
Step : 3700, training accuracy : 1
Step : 3800, training accuracy : 1
Step : 3900, training accuracy : 0.98
Step : 4000, training accuracy : 0.98
Step : 4100, training accuracy : 0.98
Step : 4200, training accuracy : 1
Step : 4300, training accuracy : 0.98
Step : 4400, training accuracy : 0.98
Step : 4500, training accuracy : 1
Step : 4600, training accuracy : 1
Step : 4700, training accuracy : 1
Step : 4800, training accuracy : 1
Step : 4900, training accuracy : 1
Step : 5000, training accuracy : 1
Step : 5100, training accuracy : 0.98
Step : 5200, training accuracy : 1
Step : 5300, training accuracy : 1
Step : 5400, training accuracy : 1
Step : 5500, training accuracy : 0.98
Step : 5600, training accuracy : 1
Step : 5700, training accuracy : 1
Step : 5800, training accuracy : 0.98
Step : 5900, training accuracy : 1
Step : 6000, training accuracy : 1
Step : 6100, training accuracy : 1
Step : 6200, training accuracy : 0.98
Step : 6300, training accuracy : 1
Step : 6400, training accuracy : 1
Step : 6500, training accuracy : 0.96
Step : 6600, training accuracy : 1
Step : 6700, training accuracy : 1
Step : 6800, training accuracy : 0.96
Step : 6900, training accuracy : 1
Step : 7000, training accuracy : 0.98
Step : 7100, training accuracy : 1
Step : 7200, training accuracy : 1
Step : 7300, training accuracy : 1
Step : 7400, training accuracy : 1
Step : 7500, training accuracy : 1
Step : 7600, training accuracy : 1
Step : 7700, training accuracy : 1
Step : 7800, training accuracy : 0.98
Step : 7900, training accuracy : 1
Step : 8000, training accuracy : 0.98
Step : 8100, training accuracy : 1
Step : 8200, training accuracy : 1
Step : 8300, training accuracy : 1
Step : 8400, training accuracy : 1
Step : 8500, training accuracy : 1
Step : 8600, training accuracy : 0.98
Step : 8700, training accuracy : 1
Step : 8800, training accuracy : 1
Step : 8900, training accuracy : 0.98
Step : 9000, training accuracy : 1
Step : 9100, training accuracy : 1
Step : 9200, training accuracy : 0.98
Step : 9300, training accuracy : 0.98
Step : 9400, training accuracy : 1
Step : 9500, training accuracy : 0.98
Step : 9600, training accuracy : 0.96
Step : 9700, training accuracy : 1
Step : 9800, training accuracy : 0.96
Step : 9900, training accuracy : 1
Step : 10000, training accuracy : 1
Step : 10100, training accuracy : 0.98
Step : 10200, training accuracy : 1
Step : 10300, training accuracy : 1
Step : 10400, training accuracy : 1
Step : 10500, training accuracy : 1
Step : 10600, training accuracy : 1
Step : 10700, training accuracy : 1
Step : 10800, training accuracy : 1
Step : 10900, training accuracy : 1
Step : 11000, training accuracy : 1
Step : 11100, training accuracy : 1
Step : 11200, training accuracy : 1
Step : 11300, training accuracy : 1
Step : 11400, training accuracy : 0.98
Step : 11500, training accuracy : 1
Step : 11600, training accuracy : 1
Step : 11700, training accuracy : 1
Step : 11800, training accuracy : 1
Step : 11900, training accuracy : 0.98
Step : 12000, training accuracy : 1
Step : 12100, training accuracy : 1
Step : 12200, training accuracy : 1
Step : 12300, training accuracy : 1
Step : 12400, training accuracy : 1
Step : 12500, training accuracy : 0.98
Step : 12600, training accuracy : 1
Step : 12700, training accuracy : 1
Step : 12800, training accuracy : 1
Step : 12900, training accuracy : 1
Step : 13000, training accuracy : 1
Step : 13100, training accuracy : 1
Step : 13200, training accuracy : 1
Step : 13300, training accuracy : 1
Step : 13400, training accuracy : 1
Step : 13500, training accuracy : 1
Step : 13600, training accuracy : 1
Step : 13700, training accuracy : 1
Step : 13800, training accuracy : 0.98
Step : 13900, training accuracy : 1
Step : 14000, training accuracy : 1
Step : 14100, training accuracy : 0.98
Step : 14200, training accuracy : 1
Step : 14300, training accuracy : 1
Step : 14400, training accuracy : 0.98
Step : 14500, training accuracy : 1
Step : 14600, training accuracy : 1
Step : 14700, training accuracy : 1
Step : 14800, training accuracy : 1
Step : 14900, training accuracy : 1
Step : 15000, training accuracy : 1
Step : 15100, training accuracy : 1
Step : 15200, training accuracy : 1
Step : 15300, training accuracy : 0.98
Step : 15400, training accuracy : 0.98
Step : 15500, training accuracy : 1
Step : 15600, training accuracy : 1
Step : 15700, training accuracy : 1
Step : 15800, training accuracy : 0.98
Step : 15900, training accuracy : 1
Step : 16000, training accuracy : 1
Step : 16100, training accuracy : 1
Step : 16200, training accuracy : 1
Step : 16300, training accuracy : 1
Step : 16400, training accuracy : 1
Step : 16500, training accuracy : 1
Step : 16600, training accuracy : 1
Step : 16700, training accuracy : 1
Step : 16800, training accuracy : 1
Step : 16900, training accuracy : 1
Step : 17000, training accuracy : 1
Step : 17100, training accuracy : 1
Step : 17200, training accuracy : 1
Step : 17300, training accuracy : 1
Step : 17400, training accuracy : 1
Step : 17500, training accuracy : 1
Step : 17600, training accuracy : 0.98
Step : 17700, training accuracy : 1
Step : 17800, training accuracy : 1
Step : 17900, training accuracy : 1
Step : 18000, training accuracy : 1
Step : 18100, training accuracy : 0.98
Step : 18200, training accuracy : 1
Step : 18300, training accuracy : 1
Step : 18400, training accuracy : 1
Step : 18500, training accuracy : 1
Step : 18600, training accuracy : 1
Step : 18700, training accuracy : 1
Step : 18800, training accuracy : 1
Step : 18900, training accuracy : 1
Step : 19000, training accuracy : 1
Step : 19100, training accuracy : 1
Step : 19200, training accuracy : 1
Step : 19300, training accuracy : 1
Step : 19400, training accuracy : 1
Step : 19500, training accuracy : 1
Step : 19600, training accuracy : 0.98
Step : 19700, training accuracy : 1
Step : 19800, training accuracy : 1
Step : 19900, training accuracy : 1
Test Accuracy : 0.9923

In [ ]: