2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/인공지능수학

[인공지능수학]MNIST

원당컴1 2022. 10. 31. 10:40

MNIST란?

숫자 0부터 9까지의 이미지로 구성된 손글씨 데이터 집합입니다.

컴퓨터에 숫자 이미지를 입력하면 머신러닝을 통해서 숫자 이미지가 의미하는 값을 출력하는데요~

이러한 기술은 우체국에서 사람들이 손으로 적은 우편번호를 인식하여 분류한다거나 주차장에 차량이 진입할 때 자동으로 차량 번호를 인식 하는 등 많은 곳에 활용을 하고 있습니다.

 

그렇다면 컴퓨터가 이러한 손글씨를 어떻게 인식하는지 살펴 봅시다.

 

이미지데이터셋

출처 : 위키백과(MNIST)

이미지 데이터셋을 살펴보면 위와 같이 손글씨용 숫자 0~9 까지의 데이터로 이루어져 있습니다.

 

MNIST 이미지

위와 같은 흑백 이미지의 데이터는 다음과 같은 형태의 숫자 모음으로 표현 됩니다.

출처 : 생활코딩

검은색 부분은 0 흰색부분은 255에 가까운 숫자로 표현이 됩니다.

위의 이미지는 28 * 28 크기의 행렬로 이루어져 있습니다. 즉 총 28*28 의 784개의 픽셀의 값으로 이루어져 있는 것을 알 수 있습니다.

28 * 28 의 형태를 1차원 배열 784개의 값으로 변환하여 다음과 같이 인공신경망의 입력 데이터로 사용합니다.

 

숫자0과 1을 식별하는 인공지능 원리

다음과 같이 12개의 픽셀로 0과 1을 구분하는 인공지능이 있다고 하면 어떤 원리로 구분 하는지 살펴 보겠습니다.

출처 : 처음 배우는 딥러닝 수학

은닉층의 3개의 A,B,C  중에서 4와 7에서 영향을 받는 A, 6과 9에서 영향을 받는 C 가 있습니다.

 

출처 : 처음 배우는 딥러닝 수학

은닉층의 3개의 A,B,C 중에서 5와 8에서 영향을 받는 B 가 있습니다.

여기서 A와 C가 활성화가 된다면 0, B가 활성화가 된다면 1로 인식을 하게 됩니다.

 

MNIST의 숫자 인식 원리

출처 : http://matrix.skku.ac.kr/KOFAC/book/

위와 같이 8이라는 이미지를 784개의 입력층에 데이터로 제공하고 히든 층은 2개 이상의 인공신경세포, 출력층은 10개의 인공신경세포로 구성되어 있습니다.

1. 입력층은 784개의 데이터를 입력 받는다.

2. 히든층에는 입력층으로부터 입력받은 데이터를 가중치와 일차 결합하고 그 결과를 함수에 대입하여 다음 층으로 내 보낸다.

3. 출력층에는 마지막 히든층에서 받은 데이터를 가중치와 일차결합하고 그 결과를 softmax 함수에 대입하여 확률의 형태로 내보낸다.

4. 10개의 인공신경세포에서 내보낸 확률값중 가장 큰 값을 예측값으로 판정한다.

 

MNIST 이미지 분류 모델을 만들어 보자.

# 데이터를 준비하고
(train_input, train_target), _ = tf.keras.datasets.mnist.load_data()
print(train_input.shape, train_target.shape) #60000 * 28 * 28(28*28 의 이미지 60000개)
train_input = train_input.reshape(60000, 784) #28 * 28 의 이차원 배열을 1차원 배열로 인코딩을 하자.
train_target = pd.get_dummies(train_target) #종속 변수를 get_dummies를 이용하여 원핫 인코딩을 수행
print(train_target.shape, train_target.shape) #60000 * 784 

# 모델을 만들고
X = tf.keras.layers.Input(shape=[784])
H = tf.keras.layers.Dense(84, activation='swish')(X) #84개의 히든레이어를 추가
Y = tf.keras.layers.Dense(10, activation='softmax')(H) #10개의 최종모델
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy') #분류문제이므로 categorical_crossentropy 사용

# 모델을 학습하고
model.fit(train_input, train_target, epochs=10)

# 모델을 이용합니다.
pred = model.predict(train_input[0:5]) #0~4 까지의 훈련데이터를 모델에 입력해 봅시다.
print(pd.DataFrame(pred).round(2)) #나온 결과를 출력해 봅니다.
print(train_target[0:5]) #실제 의미를 확인해 봅니다.

 

 

출처)

처음 배우는 딥러닝 수학

생활코딩

http://matrix.skku.ac.kr/KOFAC/book/

 

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기