티스토리 뷰

CNNs in Keras : Practical Example

- CIFAR10은 6만개의 이미지를 갖고있는 유명한 데이터셋이다.

- 이 데이터셋을 이용해서 이미지 분류를 해보자.



<MLP model>

1. Load CIFAR-10 Database

- 위와같이 로드 해주면 됨. 상대적으로 쉽게 불러올 수 있는편이다.

- 파이썬 모듈 하나만 임포트해주면 되고, 한줄의 코드만으로 모듈을 학습시키고 테스트할 수 있다.




2. Visualize the first 24 training images

- 학습시킬 이미지에 대한 subset을 시각화하여 확인할 수 있다.




3. Rescale the images by dividing every pixel in every image by 255

- 이전에 모든 이미지의 픽셀을 255로 나눠줬었는데, 이번에도 동일하다.

- 0~1 사이의 값으로 정규화 시키기 위함이다.




4. Break dataset into Training, Testing, and Validation sets

- Training, Testing, Validation 이렇게 세가지의 묶음으로 나누기위해 위와같이 작성해준다.

- Training set : 45000 / Testing set : 10000 / Validation set : 5000 으로 나눈다.

- 즉, Training과 Validation set 에서 5만개를 사용하여 네트워크를 학습시키고

- 나머지 만개를 Testing set을 사용해서 정확도를 테스트한다.

- 각 이미지들은 32x32 크기이기 때문에 매우 작은편이다.

- 또한 모두 컬러이미지이기 때문에 컴퓨터에 의해 3D 배열로 인지된다.




5. Define the model architecture

- 가장먼저 학습시켜볼 모델은 "regular vanilla neural network" 이다.

- 먼저 3D 이미지를 flatten 시켜서 벡터로 변환해줘야하고, 그렇게 되면 공간적 정보를 잃게됨.

- 그리고 2개의 hidden layer가 있는 MLP의 input으로 이 값들을 넘겨준다.

- 우측 파라미터의 수를 보면 3억5천만이 넘는다.

- 무작위로 추측했을 경우 대략 10%의 정확도가 나온다.(object의 종류가 10가지이기 때문)




6. Compile the model

- 전과 동일하게 loss function과 optimizer를 사용하고




7. Train the model

- 그리고 모델을 20 epoch 로 학습시키며 최상의 validation accuracy를 뽑아내는 가중치를 저장한다.




8. Load the model with the best classification accuracy on the validation set

- 학습이 종료되면 저장된 가중치를 불러올 수 있다.




9. Calculate classification accuracy on test set

- 불러온 가중치를 바탕으로 test set에 모델을 돌려보면 대략 40%의 정확도를 얻어낼 수 있다. 

- 이것은 무작위로 때려맞추는 10%의 확률보단 높지만, CNN을 사용하면 더 나은 결과를 얻어낼 수 있다.






<CNN model>

5. Define the model architecture

- 앞의 import 나 전처리 과정은 동일하므로 생략.

- 앞선 모델 아키텍쳐 설계파트부터 수정해 CNN 모델로 변환해주자.

- input 이미지는 콘볼루션 레이어와 max pooling 레이어가 연속된 구조를 통과하며 공간적 정보를 제거한다.

- 그 후 그 결과를 flatten해서 locally connected 되는게 아닌 fully connected 되는 레이어를 두개 더해준다.

- 이 사이에 dropout 레이어가 추가되어 함께 더해지는데, over-fitting을 최소화 하기 위해서이다.

- 주목할점은 이 네트워크가 MLP보다 훨씬 더 적은수의 파라미터만을 사용한다는 것이다.

- 하지만 이미지를 분류해내는 성능은 더 강력하다.




6. Compile the model

- 같은 loss function과 optimizer를 사용하여 모델을 컴파일해보자.




7. Train the model

- batch의 크기를 32로 두고 100 epoch 돌며 모델을 학습시키자.




8. Load the model with the best classification accuracy on the validation set

- 최상의 유효성 정확도를 얻어내는 가중치를 불러오고 




9. Calculate classification accuracy on test set

- 정확도를 테스트 해 보면 대략 66%의 정확도를 보인다.

- MLP보다 정확도가 훨씬 개선된 것을 확인할 수 있으며, 

- 이 모델에 추가적으로 CNN을 조정하여 개선되고 최적화 할 여지가 충분히 존재한다.




- CIFAR-10 데이터셋을 이용하여 데이터 과학자들간에 이 이미지분류의 정확도를 높히는 컴피티션을 벌였었는데

- 최종적으로 95%까지 끌어올릴 수 있었고, GPU로 90시간 넘게 학습을 시켰다. 관련자료

- 여러 파라미터들을 조작하며 정확도를 끌어올려보도록 하자.






- 최종적으로 학습된 CNN모델이 예측한 이미지분류. 초록 : correct / 빨강 : wrong


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함