티스토리 뷰

728x90

1. 개요

 Tensorflow도 그렇고 Keras도 그렇고 공식적인 예제를 보면 모두 내장된 0~9까지의 숫자 사진에 대해 학습을 진행합니다. 글 작성에 앞서 CNN에 대해 어떤 구조를 가지고 있는지 공부하고 싶으시다면 김태영님의 블로그를 추천드립니다.



2. 이미지 파일 학습(입력) 데이터로 변경

 이미지 파일들을 학습하기 위해서는 해당 이미지 파일들을 숫자 배열로 저장해야합니다. 당연히 여기서 숫자 배열을 픽셀을 의미합니다. 


 저 같은 경우 카테고리 별로 cnn_sample 폴더 내에 카테고리별로 폴더를 생성하고 각각 이미지들을 정리하였습니다. 

소스 코드 내 categories 변수는 카테고리 명뿐만 아니라 폴더를 찾는 용도로 사용하기 때문에 해당 class의 이미지들이 들어가 있는 폴더명을 넣어주시면 됩니다. 


 데이터의 용량을 줄이기 위해서는 이미지의 크기를 줄이는 과정이 필요합니다. 저 같은 경우 28*28 크기로 조절하였습니다.


 처음 이미지에 데이터를 학습하게 되셨다면 2중 for문안에 있는 코드에 대해 의문을 가질 수 있습니다.

cv2.resize 함수 파라미터로 fx에 28이 아닌 28/img.shape[1]가 들어갑니다. 쉽게 말씀들이면 만약 2가 들어간다면 해당 싸이즈에 2배가 됩니다. 네! 곱하기 연산이 되는 것이죠.


X.append(img/256)같은 경우는 픽셀은 0 ~ 255값을 가집니다. 그리고 학습을 하기엔 0~1사이의 소수가 필요하구요. 그래서 256으로 나누어 주었습니다.


최종 소스 코드는 다음과 같습니다.

train 데이터와 test 데이터를 구분짓고 싶지 않았는데 잘 되지 않더라구요.  이 부분은 차후에 해결하기로 하겠습니다. npy파일에 대한 설명은 http://rfriend.tistory.com/358을 참조하시기 바랍니다.



3. CNN

 Keras 공식? 예제 소스입니다. 앞서 말씀드렸지만 Keras 예제는 김태영님께서 정말 잘 설명해 주셔서 따로 설명을 작성하지 않겠습니다.

 저는 카테고리 분류이기 때문에 categorical_crossentropy가 더 성능이 좋을 줄 알았는데 binary_crossentropy이 더 좋더라구요. 그렇다구요. ㅎ


오랫 동안? 또는 많은 데이터 학습하실 땐 CheckPoint와 StopPoint를 이용해 주세요. 다만 fit 시 test데이터와 train 데이터를 나누기 때문에 앞서 분리해둔 데이터들을 합쳐주시구요. 따로 Save 명령어 쓰지 않으셔도 기준(Loss)값을 비교해서 좋으면 갱신합니다. keras 기본 코드이기 때문에 따로 설명하지 않겠습니다.



4. 학습한 모듈 사용하기

 테스트 할 데이터들을 학습 데이터처럼 28*28로 변경해줍니다. 그리고 똑같이 256으로 나누어 줍니다. 


실행 결과입니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함