๋งค๋
1์๋ฌ๊ณผ 2์๋ฌ, 10์๋ฌ์ ์ฌ์ ์๊ฐ์ด ๋ง์ ๊ธฐ๊ฐ์
๋๋ค. ์๋
๋ง๊น์ง ๋ฌด์ฒ ๋ฐ์๊ฒ ๊ฐ์๋ฅผ ํด์ ์๊ฐ์ ์ธ ์ฌ์ ๊ฐ ์์๋๋ฐ 1์๊ณผ 2์์ 2์ฃผ์ฉ๋ง ๊ฐ์๋ฅผ ํฉ๋๋ค. ์์ฌ ์๊ฐ์ด ๋์ด๋์ ์ด๊ฒ ์ ๊ฒ ์๋ฃ์ ์ฑ
๋ค์ ์ฑ๊ฒจ์ ๋ณด๊ณ ์์ต๋๋ค.
๋งค๋
๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋๋ผ๋ ๊ฒ์ AI(์ธ๊ณต์ง๋ฅ)๋ถ์ผ์ ๋ฐ์ ์๋๊ฐ ๋๋ฌด ๋นจ๋ผ์ ์ ์ ์ฑ
์ด๋ ์๋ฃ๋ฅผ ๋ณด๋ฉด ๋ฌด์ฒ ์ง์
์ฅ๋ฒฝ์ด ๋ฎ์์ง๊ณ ์ฌ์์ง๊ณ ์๋ค๋ ๊ฒ์
๋๋ค. ํน์ ํ์ด์ฌ๊ณผ ํ๋ค์ค์ ๋ํ ์ฝ๊ฐ์ ์ง์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์๋์ ์ฑ
๋ค์ ๋ณด์๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฑ ์์๋ ์๋์ฐ์ ๋ฒ์ถ์ผ๋ฐ์ค๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํ๊ฒฝ์ ์ ํ ํ๋๋ก ๋์ด ์์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋งฅ์ ์ ํธํด์ ๋งฅ์ ์๋์ฝ๋ค ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ค์ต์ ํ์ต๋๋ค.
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.1-py3-none-any.whl
pip install tflearn
์๊ธ์จ๋ฅผ ์ธ์ํ๋ ๊ฐ๋จํ ์์ ์
๋๋ค.
import tensorflow as tf
import tflearn
import tflearn.datasets.mnist as mnist
from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np
(์ถํ์ฌ์์ ๋ด๋ ค๋ฐ์ ์ด๋ฏธ์ง๋ค์ ๋ชจ๋ ์์ถ์ ํ๊ณ ๋น๋ฐ๋ฒํธ๋ ten1270์ผ๋ก ๋์ด ์์
๋ฐ์คํฌํ์ data๋ผ๋ฅผ ํด๋๋ฅผ ๋ง๋ค์ด์ ๋ชจ๋ ์ ์ฅํจ)
trainX, trainY, testX, testY = mnist.load_data('Desktop/data/mnist', one_hot=True)
Extracting Desktop/data/mnist/train-images-idx3-ubyte.gz
Extracting Desktop/data/mnist/train-labels-idx1-ubyte.gz
Extracting Desktop/data/mnist/t10k-images-idx3-ubyte.gz
Extracting Desktop/data/mnist/t10k-labels-idx1-ubyte.gz
#๋ฐ์ดํฐ ํ์ธํ๊ธฐ
#ํ์ต ์ ์ฉ ์ด๋ฏธ์ง ํฝ์
๋ฐ์ดํฐ์ ์ ๋ต ๋ฐ์ดํฐ์ ํฌ๊ธฐ ํ์ธํ๊ธฐ
print(len(trainX), len(trainY))
55000 55000
#ํ
์คํธ ์ ์ฉ ์ด๋ฏธ์ง ํฝ์
๋ฐ์ดํฐ์ ์ ๋ต ๋ฐ์ดํฐ์ ํฌ๊ธฐ ํ์ธํ๊ธฐ
print(len(testX), len(testY))
10000 10000
print(trainX)
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]]
print(trainY)
[[0. 0. 0. ... 1. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 1. 0.]]
#ํ์ต ์ ์ฉ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๋ 55,000๊ฐ, ํ
์คํธ ์ ์ฉ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ๋ 10,000๊ฐ๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
#์ค๊ฐ์ ์๋ต์ด ๋์ด์ ์ด๋ค ์ด๋ฏธ์ง๊ฐ ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ํ์ต ์ ์ฉ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ง ์ถ๋ ฅํด ๋ด
๋๋ค.
#ํฝ์
๋ฐ์ดํฐ trainX[0]์ ์ ๋ต ๋ฐ์ดํฐ trainY[0]๋ฅผ ์ถ๋ ฅํด ๋ด
๋๋ค.
#ํ์ต ์ ์ฉ ์ด๋ฏธ์ง ํฝ์
๋ฐ์ดํฐ ํ์ธํ๊ธฐ
trainX[0]
array([0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
#์คํ๊ฒฐ๊ณผ๋ฅผ ์คํฌ๋กคํด์ผ ํ์ธํ ์ ์์ต๋๋ค.
#๊ทธ๋ผ ์ด๋ฌํ ํฝ์
๊ฐ์ ์ด๋ฏธ์ง๋ก ์ถ๋ ฅํด๋ด
๋๋ค.
#ํ์ต ์ ์ฉ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํ์ธํ๊ธฐ
plt.imshow(trainX[0].reshape(28, 28), cmap=cm.gray_r, interpolation='nearest')
plt.show()
#์ด์ด์ ์ ๋ต ๋ฐ์ดํฐ ๋ฐฐ์ด์ธ trainY[0]์ ์์๋ฅผ ํ์ธํด ๋ด
๋๋ค.
#ํ์ต ์ ์ฉ ์ ๋ต ๋ฐ์ดํฐ ํ์ธ
trainY[0]
array([0., 0., 0., 0., 0., 0., 0., 1., 0., 0.])
#๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ซ์ 7์ ๋ํ๋ด๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
#๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ซ์ 7์ ๋ํ๋ด๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
#์ ๊ฒฝ๋ง ๋ง๋ค๊ธฐ
#์ด๊ธฐํ ํ๊ธฐ
tf.reset_default_graph()
#์
๋ ฅ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = tflearn.input_data(shape=[None, 784] )
#์ค๊ฐ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = tflearn.fully_connected(net, 128, activation='relu')
net = tflearn.dropout(net, 0.5)
#์ถ๋ ฅ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = tflearn.fully_connected(net, 10, activation='softmax')
net = tflearn.regression(net, optimizer='sgd', learning_rate=0.5, loss='categorical_crossentropy')
#๋ชจ๋ธ ๋ง๋ค๊ธฐ(ํ์ตํ๊ธฐ)
model = tflearn.DNN(net)
model.fit(trainX, trainY, n_epoch=20, batch_size=100, validation_set=0.1, show_metric=True)
Training Step: 9899 | total loss: 0.63888 | time: 3.541s
| SGD | epoch: 020 | loss: 0.63888 - acc: 0.9237 -- iter: 49400/49500
Training Step: 9900 | total loss: 0.58500 | time: 4.569s
| SGD | epoch: 020 | loss: 0.58500 - acc: 0.9303 | val_loss: 0.07496 - val_acc: 0.9758 -- iter: 49500/49500
--
#๋ชจ๋ธ ์ ์ฉํ๊ธฐ(์์ธกํ๊ธฐ)
pred = np.array(model.predict(testX)).argmax(axis=1)
print(pred)
[7 2 1 ... 4 5 6]
label = testY.argmax(axis=1)
print(label)
[7 2 1 ... 4 5 6]
accuracy = np.mean(pred == label, axis=0)
print(accuracy)
0.9749
#ํ๋์ ํฝ์
๊ฐ ํฌ๊ธฐ ์ถ๋ ฅํ๊ธฐ
len(trainX[0])
28
#์ ๊ฒฝ๋ง ๋ง๋ค๊ธฐ
tf.reset_default_graph()
#์
๋ ฅ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = input_data(shape=[None, 28, 28, 1])
#์ค๊ฐ ๋ ์ด์ด ๋ง๋ค๊ธฐ
#ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = conv_2d(net, 32, 5, activation='relu')
#ํด๋ง ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = max_pool_2d(net, 2)
#ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = conv_2d(net, 64, 5, activation='relu')
#ํด๋ง ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = max_pool_2d(net, 2)
#์ ๊ฒฐํฉ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = fully_connected(net, 128, activation='relu')
net = dropout(net, 0.5)
##์ถ๋ ฅ ๋ ์ด์ด ๋ง๋ค๊ธฐ
net = tflearn.fully_connected(net, 10, activation='softmax')
net = tflearn.regression(net, optimizer='sgd', learning_rate=0.5, loss='categorical_crossentropy')
#๋ชจ๋ธ ๋ง๋ค๊ธฐ(ํ์ต)
#ํ์ตํ๊ธฐ
model = tflearn.DNN(net)
model.fit(trainX, trainY, n_epoch=20, batch_size=100, validation_set=0.1, show_metric=True)
Training Step: 9899 | total loss: 0.60181 | time: 146.467s
| SGD | epoch: 020 | loss: 0.60181 - acc: 0.9654 -- iter: 49400/49500
Training Step: 9900 | total loss: 0.54352 | time: 151.505s
| SGD | epoch: 020 | loss: 0.54352 - acc: 0.9689 | val_loss: 0.03953 - val_acc: 0.9880 -- iter: 49500/49500