import tensorflow as tf
import numpy as np
def loadMNIST( prefix, folder ):
intType = np.dtype( 'int32' ).newbyteorder( '>' )
nMetaDataBytes = 4 * intType.itemsize
data = np.fromfile( folder + "\\" + prefix + '-images.idx3-ubyte', dtype = 'ubyte' )
magicBytes, nImages, width, height = np.frombuffer( data[:nMetaDataBytes].tobytes(), intType )
data = data[nMetaDataBytes:].astype( dtype = 'float32' ).reshape( [ nImages, width, height ] )
labels = np.fromfile( folder + "/" + prefix + '-labels.idx1-ubyte',
dtype = 'ubyte' )[2 * intType.itemsize:]
return data, labels
def train_neural_network(x):
prediction = convolutional_neural_network(x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=ph_y, logits=prediction))
optimizer = tf.train.AdamOptimizer().minimize(cost)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
for epoch in range(hm_epochs):
epoch_loss = 0
i = 0
while i < len(trainingImages):
start = i
end = i + btch_size
batch_x = np.array(trainingImages[start:end])
batch_y = np.array(trainingLabels[start:end])
_, c = sess.run([optimizer, cost], feed_dict={x: batch_x,ph_y: batch_y})
epoch_loss += c
i += btch_size
print('Epoch', epoch + 1, 'completed out of', hm_epochs, 'loss:', epoch_loss)
correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(ph_y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
print('Accuracy:', accuracy.eval({x: testImages, ph_y: testLabels}))