Last active
April 30, 2017 11:34
-
-
Save khvorov/6156e721c923b2718c97308df1a6ab40 to your computer and use it in GitHub Desktop.
tensorflow tutorial - MNIST data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: utf-8 | |
import input_data | |
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) | |
import tensorflow as tf | |
# training parameters | |
learning_rate = 1e-4 | |
training_iteration = 4 | |
batch_size = 50 | |
# helper methods to initialize weights and biases | |
def weight_variable(shape): | |
initial = tf.truncated_normal(shape, stddev=0.1) | |
return tf.Variable(initial) | |
def bias_variable(shape): | |
initial = tf.constant(0.1, shape=shape) | |
return tf.Variable(initial) | |
# TODO: strides? wat is it? | |
def conv2d(x, W): | |
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') | |
def max_pool_2x2(x): | |
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') | |
x = tf.placeholder(tf.float32, [None, 784]) | |
y_ = tf.placeholder(tf.float32, [None, 10]) | |
# first convolutional layer | |
W_conv1 = weight_variable([5, 5, 1, 32]) | |
b_conv1 = bias_variable([32]) | |
# reshape x to a 4d tensor | |
x_image = tf.reshape(x, [-1, 28, 28, 1]) | |
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) | |
h_pool1 = max_pool_2x2(h_conv1) | |
# second convolutional layer | |
W_conv2 = weight_variable([5, 5, 32, 64]) | |
b_conv2 = bias_variable([64]) | |
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) | |
h_pool2 = max_pool_2x2(h_conv2) | |
# densely connected layer | |
W_fc1 = weight_variable([7 * 7 * 64, 1024]) | |
b_fc1 = bias_variable([1024]) | |
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64]) | |
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) | |
# dropout | |
keep_prob = tf.placeholder(tf.float32) | |
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) | |
# readout layer | |
W_fc2 = weight_variable([1024, 10]) | |
b_fc2 = bias_variable([10]) | |
y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 | |
# train the model | |
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)) | |
train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy) | |
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) | |
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) | |
sess = tf.InteractiveSession() | |
sess.run(tf.global_variables_initializer()) | |
print('Total number of training/test examples: %d/%d' % (mnist.train.num_examples, mnist.test.num_examples)) | |
total_batch = int(mnist.train.num_examples / batch_size) | |
for i in range(training_iteration): | |
print('epoch: %d, test accuracy: %05f' % (i, accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))) | |
for j in range(total_batch): | |
batch = mnist.train.next_batch(batch_size) | |
sess.run(train_step, feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) | |
if j % 100 == 0: | |
train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0}) | |
print('step: %d/%d/%d, training accuracy: %05f' % (j, total_batch, i, train_accuracy)) | |
print('test accuracy: %05f' % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: utf-8 | |
import input_data | |
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) | |
import tensorflow as tf | |
learning_rate = 0.2 | |
training_iteration = 30 | |
batch_size = 100 | |
display_step = 2 | |
# create the model | |
x = tf.placeholder(tf.float32, [None, 784]) | |
W = tf.Variable(tf.zeros([784, 10])) | |
b = tf.Variable(tf.zeros([10])) | |
y = tf.matmul(x, W) + b | |
y_ = tf.placeholder(tf.float32, [None, 10]) | |
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) | |
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) | |
sess = tf.InteractiveSession() | |
tf.global_variables_initializer().run() | |
# train | |
total_batch = int(mnist.train.num_examples / batch_size) | |
for i in range(training_iteration): | |
for _ in range(total_batch): | |
batch_xs, batch_ys = mnist.train.next_batch(batch_size) | |
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) | |
predictions = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) | |
accuracy = tf.reduce_mean(tf.cast(predictions, tf.float32)) | |
print('Iteration: %04d, accuracy: %.04f' %(i, sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment