데이터 분석가
article thumbnail
  • 딥러닝은 기계학습 분야에서 활발하게 연구되고 있는 분야로, 이미지 분류, 음성 인식, 자연어 처리 등 다양한 분야에서 활용되고 있습니다. 이번 글에서는 손글씨 숫자 데이터인 MNIST데이터셋을 활용하여 간단한 딥러닝 모델을 구축해보겠습니다.

교재 홍보

 

케라스 창시자에게 배우는 딥러닝 개정 2판 - 예스24

단어 하나, 코드 한 줄 버릴 것이 없다!단 한 권의 딥러닝 책을 선택한다면 바로 이 책이다!케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많

www.yes24.com

1. 데이터 불러오기

  • tensorflow의 keras.datasets 모듈로부터 mnist 데이터셋을 불러온다.
  • 데이터셋은 학습 데이터와 테스트 데이터로 나뉘어져 있다.
from tensorflow.keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
  • 아래의 코드로 불러온 데이터의 배열과 데이터 타입을 확인한다.
# 데이터 형태 확인
train_images.shape
test_images.shape
train_labels[:5]
test_labels[:5]

2. 신경망 모델 정의

  • 신경망 레이어 두개로 이루어진 모델을 정의해준다.
  • 이미지 데이터를 입력으로 받아 입력 레이어에서 시작해 512개의 유닛을 가진 은닉레이어를 거쳐 10개의 유닛을 가진 출력 레이어로 이어짐으로써 10개의 확률 점수를 가진 배열을 출력하는 모델이다.
  • 입력 레이어와 은닉레이어는 relu, 출력 레이어는 softmax 활성화 함수를 사용한다.
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(512, activation='relu'), # 입력
    layers.Dense(10, activation='softmax') # 출력, 10이 의미하는 것은 예측할 범주의 개수
])

3. 모델 컴파일

  • 신경망 모델이 훈련을 마칠 수 있도록 컴파일 해준다.
model.compile(optimizer = 'rmsprop', # 성능향상을 위해 입력데이터 기반으로 모델을 업데이트 해줌
              loss = 'sparse_categorical_crossentropy', # 모델의 성늘을 측정하는 방법을 설정
              metrics = ['accuracy']) # 훈련과 테스트 과정의 모니터링 지표로 정확도 설정

4. 데이터 전처리

  • 데이터를 모델에 입력하기 위해 크기를 조정해준다.
train_images = train_images.reshape(60000, 28 * 28)
train_images = train_images.astype('float32') / 255 # 28*28 = 784의 사이즈를 [0, 255]로 rescale해주는 것을 의미
test_images = test_images.reshape(10000, 28 * 28)
test_images = test_images.astype('float32') / 255 # 28*28 = 784의 사이즈를 [0, 255]로 rescale해주는 것을 의미

5. 모델 학습

  • 모델학습을 위해 train데이터를 모델에 입력해주고 배치크기는 128로 하여 5 에포크 동안 학습시킵니다.
model.fit(train_images, train_labels, epochs=5, batch_size=128)
    # 에포크는 학습 과정에서 데이터셋을 몇번 사용하여 모델을 학습할지를 의미한다.
    # 배치크기는 한 번의 에포크에서 사용되는 데이터 샘플의 수를 의미한다.
  • 실행 결과 모델 훈련 시 에포크마다 손실함수와 정확도가 개선됨을 볼 수 있다.

6. 숫자 이미지 예측

  • 학습된 모델에 테스트 데이터를 입력해보고, 이에 대한 출력값을 확인한다.
test_digits = test_images[0:5] # 테스트 이미지 중 5개 이미지를 가져와 test_digits에 할당
predictions = model.predict(test_digits) # test_digits를 모델에 집어넣고 이에 대한 출력결과를 predictions에 할당
predictions[0]    # predictions[0]은 입력 이미지 중 첫번째에 대한 예측 결과
  • 실행 결과 다음의 출력값을 얻을 수 있는데 가장 큰 값의 인덱스가 첫번째 이미지가 될 확률이 높은 숫자 데이터이다.

  • 다음의 코드를 통해 실제로도 그러한지 확인해보자.
predictions[0].argmax()
    # 첫번째 이미지에 대한 모델의 출력 결과에서 값이 가장 큰 인덱스를 반환해주고, 여기서는 7이 도출
predictions[0][7]
    # 첫번째 이미지가 7이 될 확률을 반환한다 여기서는 0.99995625
test_labels[0]
    # 실제로 테스트 데이터의 첫번째 이미지의 라벨을 확인해본다. 7이 나옴으로써 옳게 예측했음을 알 수 있다.

7. 모델 평가

  • 테스트 데이터를 이용해 모델을 평가해본다.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('테스트 정확도', test_acc)

'DeepLearning' 카테고리의 다른 글

CNN_강아지 vs 고양이  (0) 2023.08.30
CNN_MNIST  (0) 2023.08.29
다중 분류 모델_Reuter  (0) 2023.08.29
이진 분류 모델_IMDB데이터  (0) 2023.08.28
tensorflow를 통한 선형 분류기 구현  (0) 2023.08.25
profile

데이터 분석가

@이꾹꾹

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!