์๋ ํ์ธ์!
์ค๋์ ๋ฅ๋ฌ๋์ ํตํ ์ด๋ฏธ์ง ๋ถ๋ฅ์ ๋ํด ํฌ์คํ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
keras์ cifar10๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์์ ์ด๋ฏธ์ง ๋ถ๋ฅ๋ฅผ ์ํํด๋ณด์์ต๋๋ค.
๊ทธ๋ผ ์-์~

1. ํจํค์ง ๋ค์ด
pip install --upgrade pip
pip install tensorflow
import numpy as np
import os
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
2. ๋ฐ์ดํฐ ๋ก๋ฉ
๋ฐ์ดํฐ๋ ๋ฐ๋ก ๋ค์ด๋ฐ์ง ์์๋
keras ํจํค์ง์ ๋ด์ฅ๋์ด์๋ cifar10๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์์ ๋ถ์ํด๋ณผ ์ ์์ต๋๋ค!
np.random.seed(100)
# keras์ cifar10๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์ด
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# 50000๊ฐ-training ์ด๋ฏธ์ง, 10000๊ฐ-test ์ด๋ฏธ์ง
train๋ฐ์ดํฐ์ test๋ฐ์ดํฐ์ ํํ๋ฅผ ํ์ธํ๋ ์ฝ๋๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค!
X_train : (50000, 32, 32, 3) => 50000๊ฐ ๋ฐ์ดํฐ, 32*32*3=3072bytes์ ํํ์ด๊ณ 3๊ฐ์ ์ฑ๋๋ก ๊ตฌ์ฑ๋์ด์๋ค๋ ์๋ฏธ!
# train
# 32*32*3=3072bytes => 3๊ฐ์ ์ฑ๋
print("X_train :", x_train.shape)
# ๋นํ๊ธฐ/์๋์ฐจ/์/๊ณ ์์ด/์ฌ์ด/๊ฐ/๊ฐ๊ตฌ๋ฆฌ/๋ง/๋ฐฐ/ํธ๋ญ ์ค ํ๋
print("y_train :", y_train.shape)
# test
print("X_test :", x_test.shape)
print("y_test :", y_test.shape)
๋ฐ์ดํฐ์ ํํ๋ฅผ ํ์ธํด๋ณด๋ฉด
#๋ฐ์ดํฐ์ ์๊น์ ํ์ธ
import matplotlib.pyplot as plt
%matplotlib inline
for i in range(5):
plt.imshow(x_train[i])
print(y_train[i], end=", ")
plt.show()
=> x_train[0] ์ด๋ฏธ์ง๋ 7๋ฒ ํด๋์ค์ ์ํ๋ frog
=> x_train[1] ์ด๋ฏธ์ง๋ 10๋ฒ ํด๋์ค์ ์ํ๋ truck์ผ๋ก ๋ถ๋ฅ๋จ
3) ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
# 3์ฐจ์-> 1์ฐจ์์ผ๋ก ๋ง๋ค๊ณ ์ ๊ทํ์ํด, y๋ผ๋ฒจ์ -๋ฒกํฐ๋ก ๋ณํ
x_train=x_train.reshape(50000, 3072)
x_test=x_test.reshape(10000, 3072)
# ์ ๊ทํ!
# ์ด๋ฏธ์ง : ํฝ์
์ ๋ณด๋ฅผ 0~255์ฌ์ด๋ก ๊ฐ์ง๋๋ฐ ์ด๋ฅผ ์ ๊ทํํ์ฌ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ๊ฒ ํด์ค
x_train=(x_train-np.mean(x_train))/np.std(x_train)
x_test=(x_test-np.mean(x_test))/np.std(x_test)
# 10๊ฐ์ Y๊ฐ์ ์ํซ์ธ์ฝ๋ฉ์ ํตํด์ ๋ฒกํฐ๋ก ๋ณํ
# label์ (one-hot vector๋ก ๋ณํ)
labels=10
y_train=to_categorical(y_train, labels)
y_test=to_categorical(y_test, labels)
y_train
print("y_train :", y_train)
print("y_text :", y_test)
4) ๋ชจ๋ธ ์ ์ - ๋ฅ๋ฌ๋ ๊ตฌํ
# ์ด๋ฏธ ๊ทธ๋ ค๋ ๊ทธ๋ํ๊ฐ ์๋ค๋ฉด ๋ ๋ ค์ค
# model์ ์์ฐจ์ ์ผ๋ก ๋ ์ด์ด๋ฅผ ์์๊ฐ๊ฒ ๋ค๋ ์๋!
model=Sequential()
# ์ฒซ๋ฒ์งธ ๋ ์ด์ด๋ฅผ ๋ง๋ค์
model.add(Dense(512, input_shape=(3072,), activation='relu', name='Hidden1'))
# 3072 input variables
# 512 ๋
ธ๋/๋ด๋ฐ
model.add(Dense(120, activation='relu', name='Hidden2'))
model.add(Dense(512, activation='relu', name='Hidden3'))
model.add(Dense(10, activation='sigmoid'))
# compile : ๋ชจ๋ธ์ ํ์ต์ํค๊ธฐ ์ํ ํ์ต๊ณผ์ ์ ์ค๊ณํ๋ ๋จ๊ณ
# 1. loss='categorical_crossentropy':์์คํจ์ ์ง์ /์์คํจ์๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ค์น์ ์ญ์น๋ฅผ ์์ /๋ํํจ์์ค ํ๋์ธ categorical_crossentropy
# 2. optimizer='ada':ํ๋ จ๊ณผ์ ์ค์ . ์ด ํจ์๋ฅผ ์ต์ ํํ๋ ๋ฐฉํฅ์ผ๋ก ํ์ต์ด ์ผ์ด๋๋ ๋ํ์ ์ธ ํจ์ ์ค ํ๋์ธ 'adam' ์ฌ์ฉ
# 3. metrics=['accuracy']:ํ์ต๊ณผ์ ์์ ์ ํ๋๋ฅผ ์์ง, ํ๋ จ๊ณผ์ ์ ๋ชจ๋ํฐ๋ง ํ๋ ๊ณผ์
model.compile(loss = 'categorical_crossentropy',optimizer = 'adam',metrics=['accuracy'])
# model fit
# epochs : 10๋ฒ ๋ฐ๋ณตํ๋ค๋ ์๋ฏธ
# batch_size : ํ๋ฒ์ ๋ช๊ฐ์ฉ ํ์ตํ๋์ง? => 1024๊ฐ์ฉ ํ์ต๋๋ค๊ณ ์น๋ฉด
# ํ์ต๋ฐ์ดํฐ%batch_size=ํ ์ํฌํฌ๋น ๋ช๋ฒ์ ๋ฐ๋ณต์ ํ๋์ง
model.fit(x_train, y_train, batch_size=1024, epochs=10, validation_data=(x_test, y_test), verbose=1)
5) ๋ชจ๋ธ ํ๊ฐ
# ๋ชจ๋ธ ํ๊ฐ
# verbose : ์ผ๋ง๋ ์์ธํ๊ฒ ์ ๋ณด๋ฅผ ํ์ํ ๊ฒ์ธ๊ฐ?
score=model.evaluate(x_test, y_test, verbose = 1)
print("loss=", score[0], 'test accuracy(์ ๋ต์จ): ', score[1]*100)
# ๊ฒฐ๊ณผ ์์ธก
result_predict=model.predict_classes(x_test)
print(result_predict)
# ์ฒซ๋ฒ์งธ ์ฌ์ง๋ถํฐ 5๋ฒ์งธ ํด๋์ค๋ก ์์ธก..๋๋ฒ์งธ ์ฌ์ง์ 8๋ฒ์งธ ํด๋์ค๋ก ์์ธก
์ด๋ ๊ฒ ์ค๋์ keras ํจํค์ง๋ฅผ ํ์ฉํด์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฅํ๋ ์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์ง๋ดค์ต๋๋ค!
๋ฅ๋ฌ๋์ด๋ผ์ ์ด๋ ต๊ฒ ๋๊ปด์ง์ง๋ง ๊ทธ๋๋ ์๋ฆฌ๋ฅผ ์ดํดํ๋ฉด ๊ธ๋ฐฉ ์ดํด๊ฐ ๋์ค๊บผ์์!!
