๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก EE's DEV/๋จธ์‹ ๋Ÿฌ๋‹

[Tensorflow] MLP(Multi Layer Perceptron) classification with MNIST data

by Danna 2018. 9. 24.
728x90
728x90

Tensorflow MLP classification

Classification ๊ฐœ๋… ์ •๋ฆฌ

1 Softmax Regression (๋ชจ๋ธ)

์–ด๋–ค input x๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ๊ฒƒ์ด class i๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ์ •๋„(evidence)


evidenceiโ€‹=jโˆ‘โ€‹Wi,jโ€‹xjโ€‹+biโ€‹


์œ„์˜ evidence๋ฅผ softmax function์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๋ ˆ์ด๋ธ”(Label)์„ y๋ผ๊ณ  ์˜ˆ์ธกํ•  ํ™•๋ฅ ๋กœ ๋ฐ”๊พผ๋‹ค.

y=softmax(evidence)


์œ„ ์‹์—์„œ softmax ํ•จ์ˆ˜ ์ผ์ข…์˜ link ํ•จ์ˆ˜๋กœ์จ ์„ ํ˜•ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ(evidence)๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.


softmax(x)_i = \frac{exp(x_i)}{\sum_{j}exp(x_j)}



์œ„์˜ ์‹์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.



2 Cross-entropy (ํ‰๊ฐ€)


softmax regression ๋ชจ๋ธ์ด ์ž˜ ํ•™์Šตํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” evaluation function ์ค‘ ํ•˜๋‚˜.

Hyโ€ฒโ€‹(y)=โˆ’iโˆ‘โ€‹yiโ€ฒโ€‹log(yi)



3 Gradient descent (๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•)


cross-entropy๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜.



python

# MNIST ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)


# Tenworflow ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

import tensorflow as tf

import numpy as np


# ๋ณ€์ˆ˜ ์„ค์ •

x = tf.placeholder(tf.float32, [None, 784])

W = tf.Variable(tf.zeros([784, 10]))

b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)


# cross-entropy ๋ชจ๋ธ ์„ค์ •

y_ = tf.placeholder(tf.float32, [None, 10])

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)


# ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์œผ๋กœ ๋ชจ๋ธ์„ ํ•™์Šตํ•œ๋‹ค.

init = tf.initialize_all_variables()

sess = tf.Session()

sess.run(init)

for i in range(1000):

    batch_xs, batch_ys = mnist.train.next_batch(100)

    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

    

# ํ•™์Šต๋œ ๋ชจ๋ธ์ด ์–ผ๋งˆ๋‚˜ ์ •ํ™•ํ•œ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_:mnist.test.labels}))


    Extracting MNIST_data/train-images-idx3-ubyte.gz

    Extracting MNIST_data/train-labels-idx1-ubyte.gz

    Extracting MNIST_data/t10k-images-idx3-ubyte.gz

    Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

    0.9169



  • 20.12.07 ์ˆ˜์‹ ์ˆ˜์ •


728x90
728x90