@@@ 인공지능/수학·통계를 몰라도 이해할 수 있는 쉬운 딥러닝

2 - 1. 이미지 분류(Classification) 기법 활용하기(1)

HTG 2021. 7. 8. 12:13
728x90

2-1-1. AI는 손글씨를 인식할 수 있을까?

 

●데이터 살펴보기

데이터 - MNIST(엠니스트) 데이터셋 사용

MNIST - 0부터 9까지 숫자를 손으로 그린 손글씨 데이터

            총 7만 장 - 트레이닝 6만 장, 테스트 1만 장

            가로세로 28 픽셀 크기의 이미지.

            배경의 값은 0이며 숫자가 기재된 구역의 값은 255. 이번 절의 예제는 배경의 값을 0, 숫자가 기재된 구역의 값              을 1로 노멀라이즈하여 학습.

 

●어떤 인공지능 사용?

3층짜리 FNN

층수 종류 크기 활성화 함수
1층 Flatten 28 x 28 없음
2층 FNN 256 ReLu
3층 FNN 10 SoftMax

1층에 'Flatten' - flat은 '납작한' 이라는 뜻이며 Flatten은 '납작하게 만들다' 라는 의미

                      말 그대로 입력받은 데이터를 납작하게 만들어 주는 것

2층은 크기 256에 렐루를 활성화 함수로 평범한 신경망

3층은 총 10종류의 숫자를 분류하기 때문에 크기는 10, 활성화 함수는 SoftMax 사용

 

Flatten 레이어

이미지 파일은 x축, y축로 이루어진 데이터.

앞서 해왔던 것은 FNN에 1차원 데이터를 입력.

(성별, 키, 몸무게)/(꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 넓이)

이 처럼 2차원인 이미지 파일을 1차원으로 만들어 주는 역할이 Flatten 레이어

3x3 => 9x1 로 4x4 => 16x1 / 현재 하려는 이미지는 28x28 => 784x1

 

●딥러닝 코딩

Flatten() 함수에 입력하는 것은 input_shape에 입력하려는 이미지 데이터의 크기를 입력.

MNIST 이미지는 28x28 사이즈이므로 (28,28)을 입력.

옵티마이저(optimizer) - Adam

메트릭(metrics) - accuracy

로스(loss) - sparse_categorical_crossentropy

 

●인공지능 학습

인공신경망 학습

 

학습 결과 출력

그래프로 출력

 

●인공지능 학습 결과 확인

인공지능 성능 확인하기

 

저자의 경우 14에포크에서 멈추었고 정확도가 97.98%를 보임.

나같은 경우 15에포크에서 멈추었고 정확도가 98.01%를 보임

 

학습 기록 확인하기

빨간 선이 train, 파란 선이 test

 

저자의 경우, loss의 경우 트레이닝은 꾸준히 내려가지만 3에포크 이후 감소하지 않음 => 오버피팅 발생

accuracy의 경우 3에포크 이후 눈에 띄는 성능 향상을 딱히 없는 것으로 관찰 됨.다만 1에포크에서 이미 정확도가 97%가량 됨. 오버피팅 되었지만 꽤 괜찮은 성능의 인공지능을 만드는데 성공.

 

나의 경우, loss가 2에포크 이후 감소하다가 증가하는 구간도 있음 =>오버피팅이 심하게 발생 한거 같음.accuracy의 경우, 저자와 같이 1에포크에서 97%가량 되고 어느 정도 조금씩 증가함.

 

 

MNIST와 Fashion MNIST

MNIST는 미국의 NIST에서 제작한 데이터베이스.

이 기관의 약자 앞에 M을 붙여서 MNIST.

이 데이터셋은 손으로 작성한 숫자 데이터를 포함하고 있으며, 인공지능 학습에 용이하도록 데이터의 배경을 0, 글자 영역은 255로 노멀라이즈되어 있음.

데이터의 크기도 큰데 활용하기 편하게 가공까지 되어 있어 전 세계적인 인기를 누리게 되었음.

MNIST와 비슷한 데이터셋이 많은데 그 중 가장 유명한 것이 Fashion MNIST.

이 데이터는 패션 및 라이프스타일 제품 전자상거래 플랫폼인 Zalando사의 패션의류 데이터를 가공하여 제작한 데이터 셋.

상의, 하의, 가방, 부츠, 코트 등 총 10종류 카테고리의 의류 데이터를 수집하여 MNIST와 마찬가지로 28x28사이즈로 정리한 데이터.

 

드롭아웃

이번 예제의 결과는 오버피팅이 심하게 발생.

드롭아웃을 활용하면 오버피팅을 피할 수 있다고 배움.

실제로 그런지 확인.

(드롭아웃은 크기가 큰레이어에 적용할 때 더욱 효과적)

 

정확도가 조금 낮아진 느낌이 있지만

빨간 선이 train, 파란 선이 test

train보다 test가 그래프로 보면 loss는 더 낮아지고 accuracy의 경우 더 나은 경우를 보인다.