728x90
반응형

MNIST 데이터셋

  • 1980년대 미국 국립표준기술연구소(National Institute of Standards and Technology, NIST)에서 수집한 6만 개의 훈련 이미지와 1만 개의 테스트 이미지로 구성되어 있다.
  • 넘파이 배열의 형태로 케라스에 포함되어 있다.

 

 

클래스와 레이블에 관한 노트

  • 머신 러닝 분류 문제의 범주(category)클래스(class)라 한다.
  • 데이터 포인트는 샘플(sample)이라고 한다.
  • 특정 샘플의 클래스는 레이블(label)이라고 한다.

 

MNIST import

# 케라스에서 MNIST 데이터셋 적재

from tensorflow.keras import datasets
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# train_images, train_labels는 모델이 학습해야 할 훈련 세트(training set)을 구성
# test_images, test_labels는 모델이 테스트하는 테스트 세트(test set)다.

 

훈련 데이터셋

# 훈련 데이터셋 확인
print(train_images.shape) # 데이터 살펴보기
print(len(train_labels))
print(train_labels)

[그림1] mnist 훈련 데이터셋

 

테스트 데이터셋 

# 테스트 데이터셋 확인
print(test_images.shape)
print(len(test_labels))
print(train_labels)

[그림2] mnist 테스트 데이터셋

 

신경망 구조

# 신경망 구조
from tensorflow.keras import models, layers

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28,28)))
network.add(layers.Dense(10, activation='softmax'))
  • 신경망의 핵심 구성 요소는 일종의 데이터 처리 필터라고 생각할 수 있는 층(layer)다.
  • 층은 주어진 문제에 더 의미있는 표현(representation)을 입력된 데이터로부터 추출한다.
  • 대부분의 딥러닝은 간단한 층을 연결해 구성되어 있고, 점진적으로 데이터를 정제하는 형태를 띠고 있다.
  • 이 코드에서는 완전 연결(fully coneect)된 신경망 층인 Dense 층 2개가 연속되어 있다.
  • 두 번째 층은 10개의 확률 점수가 들어 있는 배열(모두 더하면 1)을 반환하는 소프트맥스(softmax)층이다.

 

신경망 컴파일 단계에 포함될 세 가지

  1. 손실 함수(loss function) : 훈련 데이터에서 신경망의 성능을 측정하는 방법으로 네트워크가 옳은 방향으로 학습될 수 있도록 도와준다.
  2. 옵티마이저(optimizer) : 입력된 데이터와 손실 함수를 기반으로 네트워크를 업데이트하는 메커니즘이다.
  3. 훈련과 테스트 과정을 모니터링할 지표 : 여기에서는 정확도(정확히 분류된 이미지의 비율)만 고려

 

# 컴파일 단계

network.compile(optimizer = 'rmsprop',
               loss = 'categorical_crossentropy',
               metrics = ['accuracy'])

 

이미지 데이터 준비(전처리)

# 이미지 데이터 준비

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
  • 데이터를 네트워크에 맞는 크기로 바꾸고 모든 값을 0과 1사이로 스케일을 조정
    • 신경망은 입력 데이터의 스케일에 민감해 적절한 데이터 전처리 과정이 필요하다.
    • 이미지의 경우 보통 픽셀의 최댓값인 255로 나누어 사용한다.

 

레이블 준비

# 레이블 준비

from tensorflow.keras import utils 

train_labels = utils.to_categorical(train_labels)
test_labels = utils.to_categorical(test_labels)

#train_images  = train_images /255.0
#test_images = test_images / 255.0

 

모델 훈련

# 모델 훈련
 
network.fit(train_images, train_labels, 
           epochs = 5, batch_size = 128)

[그림3] 모델 훈련 손실, 정확도 

테스트 세트로 모델 확인

# 테스트 세트로 모델 확인
test_loss , test_acc =  network.evaluate(test_images, test_labels) 
print('test_loss : ', test_loss)
print('test_acc : ', test_acc)

[그림4] 테스트 세트로 모델 확인

  • 훈련 세트의 정확도보다 약간 낮다.
    • 훈련 정확도와 테스트 정확도 사이의 차이는 과대적합(overfitting) 때문이다.

 

환경 문제로 Flatten을 사용

network.add(layers.Flatten())


train_images  = train_images /255.0
test_images = test_images / 255.0

 

 

 

넘파이

  • 파이썬의 대표적인 다차원 배열 라이브러리
  • 케라스, 텐서플로, 사이킷런(scikit-learn) 등 많은 머신 러닝 라이브러리가 기본 데이터 구조로 넘파이 배열을 사용한다.

 

Dense

  • 입력과 출력을 모두 연결해주며 입력과 출력을 각각 연결해주는 가중치를 포함하고 있다.
  • Dense의 첫 번째 인자 : 출력 뉴런(노드)의 수를 결정
  • Dense의 두번째 인자 : input_dim은 입력 뉴런(노드)의 수를 결정, 맨 처음 입력층에서만 사용, input_shape는 입력 텐서의 크기를 결정한다. input_shape를 기재하지 않는 경우 앞선 층의 출력 크기를 입력 크기로 자동으로 설정한다.
  • Dense의 세 번째 인자 :  activation 활성화 함수를 선택

 

 

rmsprop

  • 기울기를 단순 누적하지 않고 지수 가중 이동 평균 Exponentially weighted moving average를 사용해 최신 기울기들이 더 크게 반영되도록 한다.

 

categorical_crossentropy

  • 범주형 교차 엔트로피
  • 레이블이 2개 이상일 경우, 멀티클래스 분류에 사용
  • 라벨이 (0,0,1,0,0), (0,1,0,0,0)와 같이 one-hot encoding된 형태로 제공될 때 사용 가능하다.

 

 

 

출처 :

www.yes24.com/Product/Goods/65050162?OzSrank=1

 

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

단어 하나, 코드 한 줄 버릴 것이 없다!창시자의 철학까지 담은 딥러닝 입문서케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많은 사람에게

www.yes24.com

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기