데이터 분석 및 프로젝트/딥러닝

딥러닝 2일 차 - 손글씨 MNIST 예제

막막한 2023. 4. 22. 15:23

손글씨 예제 - 이미지 분류 예제 

 

사람이 0-9까지 쓴 손글씨 숫자 이미지를 각 클래스로 분류 

import pandas as pd
import tensorflow as tf

# 학습, 시험 데이터셋으로 나누고 픽셀값 정규화
mnist = tf.keras.datasets.mnist

# .load_data()통해 각 형태에 맞게 데이터 불러오기
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 이미지 정규화 
# 이미지 데이터는 색의 명암을 0-255 사이으이 숫자로 표현
# 데이터가 0-255사이의 숫자로 구성되어있으니, 0-1 사이의 숫자로 정규화 해준다

x_train, x_test =x_train/255.0 ,x_test/255.0

# 데이터 레이블 구성 형태보기
pd.unique(y_train)

# 신경망 구축- 1개의 은닉층, 1개의 출력층

model =tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28))) #input
model.add(tf.keras.layers.Dense(100, activation='relu')) #hidden
model.add(tf.keras.layers.Dense(10, activation='softmax'))

model.compile(optimezer='adam',
		loss='sparse_categorical_crossentropy',
        metrics=['accuracy'])
        
model.fit(x_train, y_train, epochas=5)

# 학습한 신경망 모델 사용해 평가
model.evaluate(x_test, y_test, verbose=2)

문제

손글씨 MNIST 예제코드에서 

1. 입력층의 노드 수는 몇 개? ( 입력 데이터의 특성 수)

2. Flatten은 무슨 역할 ?

3. 마지막 Dense층의 숫자는 왜 10?

4. 마지막 Dense 층의 activation은 왜 softmax로 해주었나 

 

 

1. 28*28=784개

2. 평평하게 만들어 줌 = 한 줄로 펴줌 28*28이아니라 1*784로 만들어줌 

3. 출력층의 숫자 0부터 9까지를 분류해야하기때문에 10로 설정 

4. 0-9까지의 확률을 판단해서 0-1사이의 확률로 출력해줌