CNN: 합성곱 신경망
- 이미지 인식에 활용되는 딥러닝 구조
- 높은 인식률로 딥러닝 기술 발전에 기여
MNIST 데이터셋: 이미지 인식 성능 테스트
- NIST이 손글씨를 이용해 만든 데이터로 구성
- 7만개의 글자 이미지에 각각 0부터 9까지 이름표를 붙인 데이터셋
MNIST 데이터 불러오기
from keras.datasets import mnist
# MNIST 데이터셋을 불러오고, 학습 데이터와 테스트 데이터로 분할하는 과정
(X_train, Y_class_train), (X_test, Y_class_test) = mnist.load_data()
총 70,000개의 이미지 중 60,000개를 학습용으로, 10,000개를 테스트용으로 미리 구분
print("학습셋 이미지 수: %d 개" % (X_train.shape[0]))
print("테스트셋 이미지 수: %d 개" % (X_test.shape[0]))
불러온 데이터 중에서 첫 번째 이미지 출력하기
- 이 이미지는 가로 28 x 세로 28 = 총 784개의 픽셀로 구성
import matplotlib.pyplot as plt
# MNIST 학습셋의 첫 번째 이미지를 나타냄
# 그레이스케일 컬러맵을 사용하여 이미지를 표시하도록 지정
plt.imshow(X_train[0], cmap='Greys')
plt.show()
- 각 픽셀은 밝기 정도에 따라 0부터 255까지의 등급을 매김.
(흰색 배경이 0, 검은색이 255, 회색은 중간값)
- 글씨가 들어간 곳은 1~255까지 숫자 중 하나로 채워져 긴 행렬로 이루어진 하나의 집합으로 변환
for x in X_train[0]:
for i in x:
# 표준 출력(stdout) 스트림에 문자열을 쓰는 함수
# 개행문자를 추가하지 않음.
sys.stdout.write('%d\t' % i)
sys.stdout.write('\n')
이미지를 다시 숫자의 집합으로 바뀌어 학습셋으로 사용
- reshape(총 샘플 수, 1차원 속성의 수) 형식으로 지정함
X_train = X_train.reshape(X_train.shape[0], 784)
정규화(normalizaion): 데이터의 폭이 클 때 적절한 값으로 분산의 정도를 바꾸는 과정
- X_train 데이터의 값은 0부터 255까지의 정수
- 정규화를 위해 255로 나누어, 0.0부터 1.0 사이의 실수로 변환
X_train = X_train.astype('float64')
X_train = X_train / 255
X_test = X_test.reshape(X_test.shape[0], 784).astype('float64') / 255
분류 문제를 해결하려면 원-핫 인코딩 방식을 적용
- 레이블 "5"를 "[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]"로 변경: np_utils.to_categorical() 함수
- to_categorical(클래스, 클래스의 개수)의 형식으로 지정
Y_train = np_utils.to_categorical(Y_class_train, 10)
Y_test = np_utils.to_categorical(Y_class_test, 10)
'공부 기록 > 학교공부' 카테고리의 다른 글
| 선형 회귀 및 다중 분류 딥러닝 구현 (0) | 2024.05.22 |
|---|---|
| 딥러닝 구조 만들기 (0) | 2024.05.13 |