Guest User

TensorFlow Neural Net

a guest
Feb 13th, 2016
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. from __future__ import print_function
  2. import numpy as np
  3. import tensorflow as tf
  4. from six.moves import cPickle as pickle
  5. from six.moves import range
  6. pickle_file = 'notMNIST.pickle'
  7.  
  8. with open(pickle_file, 'rb') as f:
  9.     save = pickle.load(f)
  10.     train_dataset = save['train_dataset']
  11.     train_labels = save['train_labels']
  12.     valid_dataset = save['valid_dataset']
  13.     valid_labels = save['valid_labels']
  14.     test_dataset = save['test_dataset']
  15.     test_labels = save['test_labels']
  16.     del save
  17.     print('Training set', train_dataset.shape, train_labels.shape)
  18.     print('Validation set', valid_dataset.shape, valid_labels.shape)
  19.     print('Test set', test_dataset.shape, test_labels.shape)
  20.  
  21. image_size = 28
  22. num_labels = 10
  23.  
  24. def reformat(dataset, labels):
  25.     dataset = dataset.reshape((-1, image_size * image_size)).astype(np.float32)
  26.     # Map 0 to [1.0, 0.0, 0.0 ...], 1 to [0.0, 1.0, 0.0 ...]
  27.     labels = (np.arange(num_labels) == labels[:,None]).astype(np.float32)
  28.     return dataset, labels
  29. train_dataset, train_labels = reformat(train_dataset, train_labels)
  30. valid_dataset, valid_labels = reformat(valid_dataset, valid_labels)
  31. test_dataset, test_labels = reformat(test_dataset, test_labels)
  32. print('Training set', train_dataset.shape, train_labels.shape)
  33. print('Validation set', valid_dataset.shape, valid_labels.shape)
  34. print('Test set', test_dataset.shape, test_labels.shape)
  35.  
  36. batch_size = 128
  37.  
  38. graph = tf.Graph()
  39. with graph.as_default():
  40.     tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
  41.     tf_train_labels = tf.placeholder(tf.int32, shape=(batch_size, num_labels))
  42.     tf_valid_dataset = tf.constant(valid_dataset)
  43.     tf_test_dataset = tf.constant(test_dataset)
  44.    
  45.     weights0 = tf.Variable(tf.truncated_normal([image_size**2, num_labels]))
  46.     biases0 = tf.Variable(tf.zeros([num_labels]))
  47.  
  48.     hidden1 = tf.nn.relu(tf.matmul(tf_test_dataset, weights0) + biases0)
  49.    
  50.     weights1 = tf.Variable(tf.truncated_normal([num_labels, image_size * image_size]))
  51.     biases1 = tf.Variable(tf.zeros([image_size**2]))
  52.  
  53.     hidden2 = tf.nn.relu(tf.matmul(hidden1, weights1) + biases1)
  54.  
  55.  
  56.     logits = tf.matmul(hidden2, weights0) + biases0
  57.  
  58.     labels = tf.expand_dims(tf_train_labels, 1)
  59.    
  60.     indices = tf.expand_dims(tf.range(0, batch_size), 1)
  61.  
  62.     concated = tf.concat(1, [indices, tf.cast(labels,tf.int32)])
  63.  
  64.     onehot_labels = tf.sparse_to_dense(concated, tf.pack([batch_size, num_labels]), 1.0, 0.0)
  65.  
  66.  
  67.     loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels))
  68.  
  69.     optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
  70.  
  71.     train_prediction = tf.nn.softmax(logits)
  72.     valid_prediction = tf.nn.softmax(tf.matmul(tf.nn.relu(tf.matmul(tf.nn.relu(tf.matmul(tf_valid_dataset,weights0) + biases0),weights1)+biases1),weights0)+biases0)
  73.     test_prediction = tf.nn.softmax(tf.matmul(tf.nn.relu(tf.matmul(tf.nn.relu(tf.matmul(tf_test_dataset,weights0) + biases0),weights1)+biases1),weights0)+biases0)
  74.  
  75. num_steps = 3001
  76.  
  77. def accuracy(predictions, labels):
  78.     return (100.0*np.sum(np.argmax(predictions, 1) == np.argmax(labels,1))/predictions.shape[0])
  79.  
  80. with tf.Session(graph=graph) as session:
  81.     tf.initialize_all_variables().run()
  82.     print('Initialized')
  83.     for step in range(num_steps):
  84.         offset = (step*batch_size)%(train_labels.shape[0] - batch_size)
  85.         batch_data = train_dataset[offset:(offset+batch_size),:]
  86.         batch_labels = train_labels[offset:(offset+batch_size),:]
  87.         feed_dict = {tf_train_dataset : batch_data, tf_train_labels :batch_labels}
  88.         _,l,predictions = session.run([optimizer, loss, train_prediction],feed_dict=feed_dict)
  89.         if step%500 == 0:
  90.             print('Loss at step %d: %f' % (step,l))
  91.             print('Training accuracy: %.1f%%' % accuracy(predictions, batch_labels))
  92.             print('Validation accuracy: %.1f%%' % accuracy(valid_prediction.eval(), valid_labels))
  93.     print('Test accuracy: %.1f%%' % accuracy(test_prediction.eval(), test_labels))
Add Comment
Please, Sign In to add comment