안녕하세요. 오늘은 Keras 수업을 들으면서 진행했던 실습 내용을 적어볼까 합니다. Tensorflow와 Keras를 사용한 딥러닝 공부를 진행 중에 CNN 파트가 시작되었습니다. 대부분 mnist를 사용한 이미지 분류는 해보셨을 것이라 생각합니다. 그래서 저희는 각자가 글씨를 작성해서 각 글씨를 분류하는 CNN ㅣ모델을 만들어보기로 하였습니다. 이미지 데이터간단한 실습을 하고자
이러한 형태로 5개의 글자를 train 데이터로 2번 test 데이터로 1번 작성하여 총 52개의 이미지 데이터가 존재합니다. 데이터를 보시면 중간중간 기울어진 글씨와 90도 회전된 것도 존재하는 것이 보입니다. 이미지는 28x28 형태로 제작되었습니다. 파일 이름 형식 파일 이름 형식을 통일해 두었습니다. 전처리에 용이함을 위해서죠.
라벨은 이니셜과 글자 수는 무시하셔도 됩니다. 고유번호는 이니셜이 같은 경우를 대비해서 각 개인마다 자기의 번호를 지정해서 넣었습니다. 이것을 통해서 어떤 사람이 쓴 글씨인지 구분할 수 있습니다. 이를 통해서 어떤 사람이 쓴 글인지 맞춰보는 것도 진행해볼 예정입니다. 데이터 불러오기mnist처럼 정리되어있어서 불러오기만 하면 되는 데이터와 다르게 파일로 각각 있으니 직접 불러오는 것이 생각보다 번거로웠습니다. 직접
파일 중 jpg 파일에 해당되는 파일 목록만 따로 리스트에 담았습니다. 숨김 파일이나 다른 파일들이 섞이는 것을 방지하기 위해서 진행하였습니다.
각 단어 별 label encoding을 위해서 미리 숫자를 매겨놓았습니다.
정규화 진행
Keras CNN 모델 생성Keras를 사용해서 간단한 CNN 구조를 만들어 학습을 진행해보겠습니다.
결과 확인 및 정확도 확인
간단하게 만들었기에 validation을 안 줬고 callback도 진행하지 않았습니다. 학습을 마쳤습니다. 80%의 정답률을 가지는 것을 확인하였습니다. train 데이터에 대해서 거의 100%에 가까운 정답을 보이지만 test데이터에서는 80%의 정답률로 약간 아쉬움이 있습니다. 더 나은 성능을 위해서는?!CNN 구조를 바꾸거나, 데이터를 증식하거나, 과적합 이전에 학습을 마치는 방법 등을 생각해볼 수 있겠습니다. 다음 포스팅에서는 위의 작업을 Keras의 ImageDataGenerator를 사용해서 데이터를 증식해서 학습을 하는 방향으로 진행해보겠습니다. 과연 이미지를 증식하면 얼마나 더 좋은 결과를 가질 수 있는지 알아보겠습니다. 다음 포스팅 : [Keras] CNN ImageDataGenerator : 손글씨 글자 분류 |