TIL 191117_1

김상훈·2019년 11월 17일
0

케라스 창시자에게 배우는 딥러닝

신경망의 핵심 요소는 층(layer)이다.
연속적인 데이터를 처리하는 여과기.

#케라스에 MNIST 데이터셋 적재하기
#MNIST 데이터셋은 Numpy 배열 형태로 Keras에 포함되어 있다.
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

#신경망 구조 셋업하기
#핵심은 '여과'이다. 아래의 두 Dense는 신경망 층 2개를 형성해주는 것이다.
from keras import models
from keras import layers
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

#신경망 훈련 준비 종료단계
#다음은 컴파일 단계에서 필요한 요소들이다.
#손실함수, 옵티마이저, 훈련/테스트 모니터링 지표
network.compile(optimizer = 'rmsprop',
  loss='categorical_crossentropy',
  metrics=['accuracy'])

#이미지 데이터 준비
#앞서 불러온 데이터는 이것이다: (train_images, train_labels), (test_images, test_labes)
#이 데이터 형태는 신경망이 해석할 수 없다. 따라서 해석할 수 있는 형태로 바꿔줘야 한다.
#현재 데이터의 형태: 0~255 사이의 값, unit8, (60000, 28, 28)의 배열
#바꿔줄 데이터의 형태: 0~1 사이의 값, float32, (60000, 28 * 28)의 배열
#test_data는 (10000, 28, 28)이다.
#신경망이 해석할 수 있는 형태로 바꿔주자.
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

#레이블 준비
#레이블을 범주형으로 인코딩
from keras.utils import to_categorical # 범주형으로 전환해주는 keras util이 있는 듯 하다.
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

#신경망에 훈련데이터 학습
network.fit(train_images, train_labels, epochs=5, batch_size=128)

#테스트 세트에서 모델 작동 확인
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
profile
남과 비교하지 말자.

0개의 댓글