Softmax neural networks
Softmax என்பது multi-class classification-க்கு உதவுகின்ற ஒரு வகைப்படுத்தி ஆகும். MNIST_data என்பதற்குள் பல்வேறு விதங்களில் கையால் எழுதப்பட்ட 0 முதல் 9 வரை அடங்கிய எண்களின் தொகுப்புகள் காணப்படும். இது 0 – 9 எனும் 10 வகை label-ன் கீழ் அமையக்கூடிய கணிப்புகளை நிகழ்த்தும். இவற்றையே multi-class classification-க்கு மாதிரித் தரவுகளாக நாம் பயன்படுத்திக் கொள்ளலாம். இவற்றில் 55000 தரவுகள் பயிற்சி அளிப்பதற்கும், 10000 தரவுகள் பயிற்சி பெற்ற நெட்வொர்கை சோதிப்பதற்கும் பயன்படுத்தப்படுகின்றன.
Softmax என்பது ஒரு விஷயம் கொடுக்கப்பட்ட ஒவ்வொரு வகையின் கீழும் கணிக்கப்படுவதற்கான சாத்தியக் கூறுகளை அளந்து கூறும். கீழ்க்கண்ட எடுத்துக்காட்டில், softmax() என்பது ஒரு எண் 0-ஆக அமைவதற்கான சாத்தியக்கூறு எவ்வளவு, 1-ஆக அமைவதற்கான சாத்தியக்கூறு எவ்வளவு என்பது போன்று மொத்தம் 10 வகை class-க்குமான சாத்தியக்கூறுகளை வகுத்துச் சொல்லும். இந்த சாத்தியக்கூறுகள் 0 முதல் 1 வரை அமைந்த எண்களால் குறிக்கப்படும். இப்பத்து பிரிவுகளில் அமைந்த எண்களையும் கூட்டினால் 1 என வரும். எடுத்துக்காட்டாக கையால் எழுதப்பட்ட 8 எனும் எண் ஒவ்வொரு வகையின் கீழும் கணிக்கப்படுவதற்கான மதிப்பும், அவைகளின் கூட்டுத் தொகை 1 என அமைவதும் பின்வருமாறு அமையும். இவைகளில் எதன் மதிப்பு அதிகமாக இருக்கிறதோ அந்த வகையின் கீழ் கொடுக்கப்பட்ட எண் கணிக்கப்படும்.
This file contains 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
import numpy as np | |
import matplotlib.pyplot as plt | |
import tensorflow as tf | |
from tensorflow.examples.tutorials.mnist import input_data | |
from random import randint | |
mnist = input_data.read_data_sets("MNIST_data/data", one_hot=True) | |
print (mnist.train.images.shape) | |
print (mnist.train.labels.shape) | |
print (mnist.test.images.shape) | |
print (mnist.test.labels.shape) | |
X = tf.placeholder(dtype = tf.float32, shape = (None,784), name='input') | |
Y = tf.placeholder(dtype = tf.float32, shape = ([None,10])) | |
W = tf.Variable(initial_value=tf.zeros([784, 10]), dtype = tf.float32) | |
b = tf.Variable(initial_value=tf.zeros([10], dtype=tf.float32)) | |
XX = tf.reshape(X, [-1, 784]) | |
Z = tf.nn.softmax(tf.matmul(XX, W) + b, name="output") | |
cost = -tf.reduce_mean(Y * tf.log(Z)) * 1000.0 | |
GD = tf.train.GradientDescentOptimizer(0.005).minimize(cost) | |
correct_prediction = tf.equal(tf.argmax(Z, 1),tf.argmax(Y, 1)) | |
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) | |
with tf.Session() as sess: | |
sess.run(tf.global_variables_initializer()) | |
writer = tf.summary.FileWriter('log_mnist_softmax',graph=tf.get_default_graph()) | |
for epoch in range(10): | |
batch_count = int(mnist.train.num_examples/100) | |
for i in range(batch_count): | |
batch_x, batch_y = mnist.train.next_batch(100) | |
c = sess.run([GD, cost], feed_dict={X: batch_x, Y: batch_y})[1] | |
print ("Epoch: ", epoch) | |
print ("Accuracy: ", accuracy.eval(feed_dict={X: mnist.test.images,Y: mnist.test.labels})) | |
print ("done") | |
num = randint(1, mnist.test.images.shape[1]) | |
img = mnist.test.images[num] | |
classification = sess.run(tf.argmax(Z, 1), feed_dict={X: [img]}) | |
print('Neural Network predicted', classification[0]) | |
print('Real label is:', np.argmax(mnist.test.labels[num])) |
நிரலுக்கான வெளியீடு:
(55000, 784)
(55000, 10)
(10000, 784)
(10000, 10)
Epoch: 0
Epoch: 1
Epoch: 2
Epoch: 3
Epoch: 4
Epoch: 5
Epoch: 6
Epoch: 7
Epoch: 8
Epoch: 9
Accuracy: 0.9226
done
Neural Network predicted 3
Real label is: 3