In [1]:
import tensorflow as tf
from tensorflow.python.ops import rnn,rnn_cell
import numpy as np

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)


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

In [2]:
learning_rate = 0.001
epochs = 100000
batch_size = 128
display_step = 10

n_input = 28
n_steps = 28
n_hidden = 128
n_classes = 10

X = tf.placeholder(tf.float32, [None, n_steps, n_input])
Y = tf.placeholder(tf.float32, [None, n_classes])

In [3]:
weights = {
    'out' : tf.Variable(tf.random_normal([n_hidden, n_classes]))
}
biases = {
    'out' : tf.Variable(tf.random_normal([n_classes])) 
}

In [4]:
def RNN(X, weights, biases):
    X = tf.transpose(X, [1,0,2])
    X = tf.reshape(X, [-1, n_input])
    X = tf.split(0, n_steps, X)
    
    with tf.variable_scope('forward'):
        lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias = 1.0)
        outputs, states = rnn.rnn(lstm_cell, X, dtype=tf.float32)
    
    return tf.matmul(outputs[-1], weights['out']) + biases['out']

pred = RNN(X, weights, biases)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, Y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(Y, 1))
accuracy= tf.reduce_mean(tf.cast(correct_pred, tf.float32))

init = tf.initialize_all_variables()

In [5]:
with tf.Session() as sess:
    sess.run(init)
    step = 1
    
    while step*batch_size < epochs:
        batch_X, batch_Y = mnist.train.next_batch(batch_size)
        batch_X = batch_X.reshape((batch_size, n_steps, n_input))
        
        sess.run(optimizer, feed_dict={X:batch_X, Y: batch_Y})
        
        if step% display_step == 0:
            acc = sess.run(accuracy, feed_dict={X:batch_X, Y:batch_Y})
            loss = sess.run(cost, feed_dict={X:batch_X, Y:batch_Y})
            
            print( "Iter " + str(step*batch_size) + ", Minibatch Loss= " + \
                  "{:.6f}".format(loss) + ", Training Accuracy= " + \
                  "{:.5f}".format(acc))
        step +=1
        
    print("Optimization Finished!")
    
    test_len = 128
    test_data = mnist.test.images[:test_len].reshape((-1, n_steps, n_input))
    test_label = mnist.test.labels[:test_len]
    print("Testing Accuracy: "+ str(sess.run(accuracy, feed_dict={X:test_data,Y:test_label})))


Iter 1280, Minibatch Loss= 1.607635, Training Accuracy= 0.41406
Iter 2560, Minibatch Loss= 1.467131, Training Accuracy= 0.48438
Iter 3840, Minibatch Loss= 1.097093, Training Accuracy= 0.60156
Iter 5120, Minibatch Loss= 0.817938, Training Accuracy= 0.78125
Iter 6400, Minibatch Loss= 0.703708, Training Accuracy= 0.82031
Iter 7680, Minibatch Loss= 1.095960, Training Accuracy= 0.63281
Iter 8960, Minibatch Loss= 0.665088, Training Accuracy= 0.78125
Iter 10240, Minibatch Loss= 0.569227, Training Accuracy= 0.80469
Iter 11520, Minibatch Loss= 0.333717, Training Accuracy= 0.92188
Iter 12800, Minibatch Loss= 0.594469, Training Accuracy= 0.81250
Iter 14080, Minibatch Loss= 0.365413, Training Accuracy= 0.85938
Iter 15360, Minibatch Loss= 0.333534, Training Accuracy= 0.89062
Iter 16640, Minibatch Loss= 0.358673, Training Accuracy= 0.92969
Iter 17920, Minibatch Loss= 0.314237, Training Accuracy= 0.89062
Iter 19200, Minibatch Loss= 0.263935, Training Accuracy= 0.89844
Iter 20480, Minibatch Loss= 0.163533, Training Accuracy= 0.95312
Iter 21760, Minibatch Loss= 0.414759, Training Accuracy= 0.86719
Iter 23040, Minibatch Loss= 0.143116, Training Accuracy= 0.94531
Iter 24320, Minibatch Loss= 0.360301, Training Accuracy= 0.89062
Iter 25600, Minibatch Loss= 0.390341, Training Accuracy= 0.89062
Iter 26880, Minibatch Loss= 0.256089, Training Accuracy= 0.92188
Iter 28160, Minibatch Loss= 0.278284, Training Accuracy= 0.92969
Iter 29440, Minibatch Loss= 0.281252, Training Accuracy= 0.92188
Iter 30720, Minibatch Loss= 0.274261, Training Accuracy= 0.89844
Iter 32000, Minibatch Loss= 0.188344, Training Accuracy= 0.93750
Iter 33280, Minibatch Loss= 0.210365, Training Accuracy= 0.93750
Iter 34560, Minibatch Loss= 0.242646, Training Accuracy= 0.94531
Iter 35840, Minibatch Loss= 0.210940, Training Accuracy= 0.93750
Iter 37120, Minibatch Loss= 0.314142, Training Accuracy= 0.88281
Iter 38400, Minibatch Loss= 0.127600, Training Accuracy= 0.95312
Iter 39680, Minibatch Loss= 0.111277, Training Accuracy= 0.96094
Iter 40960, Minibatch Loss= 0.329561, Training Accuracy= 0.91406
Iter 42240, Minibatch Loss= 0.164698, Training Accuracy= 0.94531
Iter 43520, Minibatch Loss= 0.149887, Training Accuracy= 0.94531
Iter 44800, Minibatch Loss= 0.133343, Training Accuracy= 0.95312
Iter 46080, Minibatch Loss= 0.156618, Training Accuracy= 0.95312
Iter 47360, Minibatch Loss= 0.177231, Training Accuracy= 0.92969
Iter 48640, Minibatch Loss= 0.242966, Training Accuracy= 0.90625
Iter 49920, Minibatch Loss= 0.205929, Training Accuracy= 0.92969
Iter 51200, Minibatch Loss= 0.097851, Training Accuracy= 0.96094
Iter 52480, Minibatch Loss= 0.213554, Training Accuracy= 0.94531
Iter 53760, Minibatch Loss= 0.046097, Training Accuracy= 0.99219
Iter 55040, Minibatch Loss= 0.172025, Training Accuracy= 0.94531
Iter 56320, Minibatch Loss= 0.131478, Training Accuracy= 0.94531
Iter 57600, Minibatch Loss= 0.155980, Training Accuracy= 0.96094
Iter 58880, Minibatch Loss= 0.128102, Training Accuracy= 0.96875
Iter 60160, Minibatch Loss= 0.096857, Training Accuracy= 0.97656
Iter 61440, Minibatch Loss= 0.153983, Training Accuracy= 0.95312
Iter 62720, Minibatch Loss= 0.162428, Training Accuracy= 0.95312
Iter 64000, Minibatch Loss= 0.123866, Training Accuracy= 0.95312
Iter 65280, Minibatch Loss= 0.114129, Training Accuracy= 0.96875
Iter 66560, Minibatch Loss= 0.071003, Training Accuracy= 0.97656
Iter 67840, Minibatch Loss= 0.044239, Training Accuracy= 1.00000
Iter 69120, Minibatch Loss= 0.093350, Training Accuracy= 0.96094
Iter 70400, Minibatch Loss= 0.120641, Training Accuracy= 0.96094
Iter 71680, Minibatch Loss= 0.095967, Training Accuracy= 0.96875
Iter 72960, Minibatch Loss= 0.186370, Training Accuracy= 0.93750
Iter 74240, Minibatch Loss= 0.058370, Training Accuracy= 0.99219
Iter 75520, Minibatch Loss= 0.132247, Training Accuracy= 0.95312
Iter 76800, Minibatch Loss= 0.152971, Training Accuracy= 0.96094
Iter 78080, Minibatch Loss= 0.106498, Training Accuracy= 0.96875
Iter 79360, Minibatch Loss= 0.082535, Training Accuracy= 0.95312
Iter 80640, Minibatch Loss= 0.085938, Training Accuracy= 0.96875
Iter 81920, Minibatch Loss= 0.090987, Training Accuracy= 0.96875
Iter 83200, Minibatch Loss= 0.136959, Training Accuracy= 0.95312
Iter 84480, Minibatch Loss= 0.172357, Training Accuracy= 0.95312
Iter 85760, Minibatch Loss= 0.066644, Training Accuracy= 0.98438
Iter 87040, Minibatch Loss= 0.082820, Training Accuracy= 0.96094
Iter 88320, Minibatch Loss= 0.113848, Training Accuracy= 0.95312
Iter 89600, Minibatch Loss= 0.109539, Training Accuracy= 0.96094
Iter 90880, Minibatch Loss= 0.104972, Training Accuracy= 0.97656
Iter 92160, Minibatch Loss= 0.135016, Training Accuracy= 0.96094
Iter 93440, Minibatch Loss= 0.120617, Training Accuracy= 0.96094
Iter 94720, Minibatch Loss= 0.085798, Training Accuracy= 0.96875
Iter 96000, Minibatch Loss= 0.172695, Training Accuracy= 0.94531
Iter 97280, Minibatch Loss= 0.201662, Training Accuracy= 0.95312
Iter 98560, Minibatch Loss= 0.162314, Training Accuracy= 0.96875
Iter 99840, Minibatch Loss= 0.085721, Training Accuracy= 0.97656
Optimization Finished!
Testing Accuracy: 0.976562

In [29]:
from pprint import pprint
sess = tf.InteractiveSession()
X = np.array([
                [[1, 2, 3,4],
                 [5,  6, 7,8],
                 [9,10,11,12]],
        
                [[13,14,15,16],
                 [17, 18, 19,20],
                 [21, 22, 23, 24]]
             ])

pprint(X) # 2x 3x 4


array([[[ 1,  2,  3,  4],
        [ 5,  6,  7,  8],
        [ 9, 10, 11, 12]],

       [[13, 14, 15, 16],
        [17, 18, 19, 20],
        [21, 22, 23, 24]]])

In [30]:
pprint(tf.transpose(X,[0,2,1]).eval())


array([[[ 1,  5,  9],
        [ 2,  6, 10],
        [ 3,  7, 11],
        [ 4,  8, 12]],

       [[13, 17, 21],
        [14, 18, 22],
        [15, 19, 23],
        [16, 20, 24]]])

In [31]:
pprint(tf.transpose(X,[2,1,0]).eval())#3x2x4


array([[[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]],

       [[ 4, 16],
        [ 8, 20],
        [12, 24]]])

In [32]:
pprint(tf.transpose(X,[2,1,0]).eval()) # 4x3x2


array([[[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]],

       [[ 4, 16],
        [ 8, 20],
        [12, 24]]])

In [33]:
pprint(tf.transpose(X,[1,0,2]).eval()) # 3x2x4


array([[[ 1,  2,  3,  4],
        [13, 14, 15, 16]],

       [[ 5,  6,  7,  8],
        [17, 18, 19, 20]],

       [[ 9, 10, 11, 12],
        [21, 22, 23, 24]]])

In [35]:
A=tf.transpose(X,[1,0,2]).eval()
tf.reshape(A, [-1, 4]).eval()


Out[35]:
array([[ 1,  2,  3,  4],
       [13, 14, 15, 16],
       [ 5,  6,  7,  8],
       [17, 18, 19, 20],
       [ 9, 10, 11, 12],
       [21, 22, 23, 24]])

In [ ]:


In [ ]: