In [1]:
import tensorflow as tf
from math import exp
Download images and labels into mnist.test (10K images+labels) and mnist.train (60K images+labels)
In [2]:
from tensorflow.examples.tutorials.mnist import \
input_data as mnist_data
mnist = mnist_data.read_data_sets(
"data",
one_hot=True,
reshape=False,
validation_size=0
)
In [3]:
width = 28
height = 28
area = width * height
final_nodes = 10
lr = .003
In [4]:
# Clear Tensor Names. ( Not required)
tf.reset_default_graph()
In [5]:
X = tf.placeholder(tf.float32, [None, width, height, 1])
Y_ = tf.placeholder(tf.float32, [None, final_nodes])
# Input Images as a list of pixels
XX = tf.reshape(X, [-1, area])
In [6]:
W = tf.Variable(tf.zeros([area, final_nodes]))
B = tf.Variable(tf.zeros([final_nodes]))
In [7]:
Y = tf.nn.softmax(tf.matmul(XX, W) + B)
In [8]:
cross_entropy = -tf.reduce_sum(Y_ * tf.log(Y))
In [9]:
optimizer = tf.train.GradientDescentOptimizer(lr)
train_step = optimizer.minimize(cross_entropy)
In [10]:
is_correct = tf.equal(tf.argmax(Y, 1), tf.argmax(Y_, 1))
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
In [64]:
# init = tf.initialize_all_variables() # Deprecated
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
# AN interactive session
# sess = tf.InteractiveSession()
In [14]:
for i in range(1000):
batch_X, batch_Y = mnist.train.next_batch(100)
train_data = {X: batch_X, Y_: batch_Y}
sess.run(train_step, feed_dict=train_data)
In [15]:
test_data={X: mnist.test.images, Y_: mnist.test.labels}
a, _ = sess.run([accuracy, cross_entropy], feed_dict=test_data)
print(a)
In [16]:
hidden_layer = 200
In [41]:
W1 = tf.Variable(
tf.truncated_normal(
[area, hidden_layer],
stddev=0.1
)
)
W2 = tf.Variable(
tf.truncated_normal(
[hidden_layer, final_nodes],
stddev=0.1
)
)
B1 = tf.Variable(tf.ones([hidden_layer])/10)
B2 = tf.Variable(tf.ones([final_nodes])/10)
In [42]:
Y = tf.nn.sigmoid(tf.matmul(XX, W1) + B1)
In [43]:
Y = tf.nn.softmax(tf.matmul(Y, W2) + B2)
In [44]:
layers = [
area,
200,
100,
60,
30,
final_nodes
]
In [45]:
Y = XX
In [46]:
WW = [
tf.Variable(tf.truncated_normal(
[layers[i], layers[i+1]],
stddev=0.1,
name="Weights"
))
for i in range(len(layers)-1)
]
BB = [
tf.Variable(tf.ones([layers[i]])/10, "Biases")
for i in range(1, len(layers))
]
In [47]:
i = 0
for i in range(len(layers)-2):
name = "activate_" + str(i)
Y = tf.nn.sigmoid(tf.matmul(Y, WW[i], name=name) + BB[i])
In [48]:
prediction = tf.matmul(Y, WW[i+1]) + BB[i+1]
Y = tf.nn.softmax(prediction)
sigmoid with reluGradientDescentOptimiser with AdamOptimizersoftmax never returned
In [49]:
Y = XX
In [50]:
i = 0
for i in range(len(layers)-2):
preactivate = tf.matmul(Y, WW[i], name="Product") + BB[i]
Y = tf.nn.relu(preactivate)
In [51]:
logits = tf.matmul(Y, WW[i+1]) + BB[i+1]
Y = tf.nn.softmax(logits)
In [52]:
logits = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y_)
cross_entropy = tf.reduce_mean(logits) * 100
In [53]:
optimizer = tf.train.AdamOptimizer(lr)
train_step = optimizer.minimize(cross_entropy)
In [54]:
lrmax = 0.003
lrmin = 0.00001
decay_speed = 2000.0
In [59]:
L = tf.placeholder(tf.float32)
In [34]:
# Training (V5-6)
# - Learning rate decreases as time goes on.
for i in range(1000):
batch_X, batch_Y = mnist.train.next_batch(100)
learning_rate = lrmin + (lrmax - lrmin) * exp(-i / decay_speed)
train_data = {X: batch_X, Y_: batch_Y, L: learning_rate}
# train
sess.run(train_step, feed_dict=train_data)
In [61]:
keep_ratio = 0.9
In [62]:
keep_prob = tf.placeholder(tf.float32)
In [63]:
Y = XX
i = 0
for i in range(len(layers)-2):
name = "activate_" + str(i)
Y = tf.nn.relu(tf.matmul(Y, WW[i], name=name) + BB[i])
Y = tf.nn.dropout(Y, keep_prob)
In [65]:
for i in range(1000):
batch_X, batch_Y = mnist.train.next_batch(100)
learning_rate = lrmin + (lrmax - lrmin) * exp(-i / decay_speed)
train_data = {
X: batch_X,
Y_: batch_Y,
L: learning_rate,
keep_prob: keep_ratio
}
sess.run(train_step, feed_dict=train_data)
In [39]:
test_data = {X: mnist.test.images, Y_: mnist.test.labels, keep_prob: 1.0}
a,c = sess.run([accuracy, cross_entropy], feed_dict=test_data)
print(a)
In [ ]: