Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import print_function
- import numpy as np
- import tensorflow as tf
- from six.moves import cPickle as pickle
- from six.moves import range
- pickle_file = 'notMNIST.pickle'
- with open(pickle_file, 'rb') as f:
- save = pickle.load(f)
- train_dataset = save['train_dataset']
- train_labels = save['train_labels']
- valid_dataset = save['valid_dataset']
- valid_labels = save['valid_labels']
- test_dataset = save['test_dataset']
- test_labels = save['test_labels']
- del save
- print('Training set', train_dataset.shape, train_labels.shape)
- print('Validation set', valid_dataset.shape, valid_labels.shape)
- print('Test set', test_dataset.shape, test_labels.shape)
- image_size = 28
- num_labels = 10
- def reformat(dataset, labels):
- dataset = dataset.reshape((-1, image_size * image_size)).astype(np.float32)
- # Map 0 to [1.0, 0.0, 0.0 ...], 1 to [0.0, 1.0, 0.0 ...]
- labels = (np.arange(num_labels) == labels[:,None]).astype(np.float32)
- return dataset, labels
- train_dataset, train_labels = reformat(train_dataset, train_labels)
- valid_dataset, valid_labels = reformat(valid_dataset, valid_labels)
- test_dataset, test_labels = reformat(test_dataset, test_labels)
- print('Training set', train_dataset.shape, train_labels.shape)
- print('Validation set', valid_dataset.shape, valid_labels.shape)
- print('Test set', test_dataset.shape, test_labels.shape)
- batch_size = 128
- graph = tf.Graph()
- with graph.as_default():
- tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
- tf_train_labels = tf.placeholder(tf.int32, shape=(batch_size, num_labels))
- tf_valid_dataset = tf.constant(valid_dataset)
- tf_test_dataset = tf.constant(test_dataset)
- weights0 = tf.Variable(tf.truncated_normal([image_size**2, num_labels]))
- biases0 = tf.Variable(tf.zeros([num_labels]))
- hidden1 = tf.nn.relu(tf.matmul(tf_test_dataset, weights0) + biases0)
- weights1 = tf.Variable(tf.truncated_normal([num_labels, image_size * image_size]))
- biases1 = tf.Variable(tf.zeros([image_size**2]))
- hidden2 = tf.nn.relu(tf.matmul(hidden1, weights1) + biases1)
- logits = tf.matmul(hidden2, weights0) + biases0
- labels = tf.expand_dims(tf_train_labels, 1)
- indices = tf.expand_dims(tf.range(0, batch_size), 1)
- concated = tf.concat(1, [indices, tf.cast(labels,tf.int32)])
- onehot_labels = tf.sparse_to_dense(concated, tf.pack([batch_size, num_labels]), 1.0, 0.0)
- loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels))
- optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
- train_prediction = tf.nn.softmax(logits)
- 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)
- 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)
- num_steps = 3001
- def accuracy(predictions, labels):
- return (100.0*np.sum(np.argmax(predictions, 1) == np.argmax(labels,1))/predictions.shape[0])
- with tf.Session(graph=graph) as session:
- tf.initialize_all_variables().run()
- print('Initialized')
- for step in range(num_steps):
- offset = (step*batch_size)%(train_labels.shape[0] - batch_size)
- batch_data = train_dataset[offset:(offset+batch_size),:]
- batch_labels = train_labels[offset:(offset+batch_size),:]
- feed_dict = {tf_train_dataset : batch_data, tf_train_labels :batch_labels}
- _,l,predictions = session.run([optimizer, loss, train_prediction],feed_dict=feed_dict)
- if step%500 == 0:
- print('Loss at step %d: %f' % (step,l))
- print('Training accuracy: %.1f%%' % accuracy(predictions, batch_labels))
- print('Validation accuracy: %.1f%%' % accuracy(valid_prediction.eval(), valid_labels))
- print('Test accuracy: %.1f%%' % accuracy(test_prediction.eval(), test_labels))
Add Comment
Please, Sign In to add comment