본문 바로가기
AI

[Python] 이미지 분류 1 - Minist 손글씨 인식

by 은구잇 2021. 12. 22.
728x90

1.  데이터 준비

MINIST 데이터셋

0부터 9까지 숫자를 손으로 그린 손글씨 데이터 7만장

가로 세로 28x28 사이즈의 정사각형 이미지

 

  • 훈련 데이터 : 60,000개
  • 테스트 데이터 : 10,000개

 

 

2. 입력값과 레이블 설정

입력값 : 손글씨 이미지

레이블 : 손글씨가 해당하는 숫자

 

3. 신경망 구조

 

- Flatten 레이어

이미지를 입력값으로 가질때 flatten 을 사용해서 벡터화 하는 과정이 필요함.

 

 

 

4. 신경망 구축 과정

from tensorflow import keras

import data_reader

 

# 에포크 결정

EPOCHS = 20

 

#데이터 읽기

dr  = data_reader.DataReader()

# 인공신경망 제작

model = keras.Sequential([

      keras.layers.Flatten(input_shape=(28,28)),

      keras.layers.Dense(128,activation = 'relu'),

      kears.layers.Dense(10,activation = 'softmax')

])

 

model.compile(optimizer = 'adam', metrics = ['accuracy'],

                          loss = 'sparse_categorical_crossentropy')

 

# 인공신경망 학습

콜백함수로 과적합 방지할 수 있음

 

early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
                    validation_data=(dr.test_X, dr.test_Y),
                    callbacks=[early_stop])

 

5. 모델 테스트

# 모델에 훈련데이터를 넣고 결과 값 확인

import pandas as pd
pred= model.predict(dr.train_X[0:5])
pd.DataFrame(pred).round(2)

 

# 훈련 데이터 y 랑 확인해보기

dr.train_Y[0:5]

array([5, 0, 4, 1, 9], dtype=uint8)

값이 똑같은 것을 확인할수있음!!