| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- stride
- Replication
- os
- gas
- C++
- 게임개발
- gameplay ability system
- 언리얼엔진
- photon fusion2
- local prediction
- Multiplay
- unity
- widget
- 언리얼 엔진
- listen server
- gameplay tag
- 게임 개발
- Aegis
- CTF
- MAC
- attribute
- ability task
- UI
- Unreal Engine
- linear regression
- 유니티
- rpc
- animation
- gameplay effect
- 보안
Archives
- Today
- Total
Replicated
Keras - MNIST 본문
MNIST database
- 손으로 쓴 숫자들로 이루어진 대형 데이터베이스
- traning, test 데이터를 별도로 제공
- Keras에 포함되어 있음
데이터 형태
- 28 * 28의 흑백 이미지
- 1픽셀은 0~255의 값 저장
- 2차원 형태의 데이터는 학습을 할 수 없으니, 1 * 784 형태의 1차원 이미지로 변경하여 사용
- 0~255 사이의 픽셀 값은 0~1 사이로 변환하여 사용
- 클래스 레이블 개수 10개 (0~9)
# load required modules
from keras.datasets import mnist
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense, Input
from keras.layers import Flatten
from keras.layers import Dropout
from keras.utils import to_categorical
import matplotlib.pyplot as plt
import numpy as np
import sys
import os
sys.path.append(os.path.abspath("/content/gdrive/MyDrive/Data"))
import TrainPlot
# load dataset
(train_X, train_y), (test_X, test_y) = mnist.load_data()
train_X, test_X = train_X / 255.0, test_X / 255.0
# one hot encoding
train_y = to_categorical(train_y)
test_y = to_categorical(test_y)
데이터 준비
epochs = 20
batch_size = 128
learning_rate = 0.01
model = Sequential()
model.add(Input(shape=(28,28)))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(rate = 0.4))
model.add(Dense(128, activation='relu'))
model.add(Dropout(rate = 0.3))
model.add(Dense(10, activation='softmax'))
model.summary()

모델 정의
입력을 받고, 플래튼 (1*784)
256 -> 드롭아웃 -> 128 -> 드롭아웃 -> 10
adam = optimizers.Adam(learning_rate=learning_rate)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
disp = model.fit(train_X, train_y,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_split = 0.2)

모델 학습
pred = model.predict(test_X)
print(pred)
y_classes = [np.argmax(y, axis=None, out=None) for y in pred]
print(y_classes)
score = model.evaluate(test_X, test_y, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
plt.plot(disp.history['accuracy'])
plt.plot(disp.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

모델 테스트, 정확도 히스토리
plt.plot(disp.history['loss'])
plt.plot(disp.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

손실율 히스토리
히스토리를 이용한 학습 그래프 -> 학습이 끝나야 얻을 수 있음
진행 과정 -> 콜백 이용
disp = model.fit(train_X, train_y,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_split = 0.2,
callbacks=[TrainPlot.TrainingPlot()])

콜백 함수 넣어주면 됨