본문 바로가기

머신러닝 & 딥러닝 공부/Tensorflow

[Tensorflow dev 자격증] Multiclass Classifications

반응형

안녕하세요

27년차 진로탐색꾼 조녁입니다!

 

오늘은 텐서플로우 자격증 과정 두번째 강좌인

' Convolutional Neural Networks in TensorFlow 

4주차 강의(Multiclass Classifications) 및 자료를 공부했습니다.

설연휴가 끝나가는데 예상보다 늦어졌지만 그래도 한개씩 해나가야죠!! 아자자~!!

친척분들을 찾아뵙지 못했지만 그래도 안부전화 돌리면서 인사드리고 나서 기쁜 마음 가지고 책상에 앉았습니다 ㅎ

 

그럼 공부 시-작!

 

후.. 글 저장안했다가 마지막에 다 날라가서 다시쓴다..

 

첫번째 영상, 이번 주차에 다중분류 모델을 살펴볼 것이다. 이전에 패션 데이터분류할 때 한번 살펴본바있지만, 이번엔 좀 더 큰 데이터로 살펴볼 것이다. 바로 '가위-바위-보 분류' 모델을 살펴볼 것인데 분류하기 위해선 인종별, 성별, 크기별 손이 필요하다. 그래서 우리는 CGI 기반 데이터를 사용할 것인데, 이번 기회를 통해 익숙해지길 바랍니다. 가시죠.

 

두번째 영상, 다중분류를 위한 디렉터리 지정은 아래 그림과 같이 이진분류와 흡사하다. training 과 validation을 분류한 후 그 속에서 가위, 바위,보 하위 디렉토리로 분류한다.

그림1. 다중분류 디렉터리

 

세번째 읽기자료, 이번 가위바위보 분류 모델을 학습 및 평가하기 위해서 아래에서 데이터셋을 가져올 수 있다. 이것은 CGI 기반으로 생성된이미지이며 학습과 평가 데이터를 제공한다. 그리고 마지막에 분류기가 잘 작동하는 지 볼 수 있는 유효성 검증 데이터도 제공한다.

www.laurencemoroney.com/rock-paper-scissors-dataset/

 

Rock Paper Scissors Dataset

Introducing Rock Paper Scissors – A multi class learning dataset Abstract Rock Paper Scissors is a dataset containing 2,892 images of diverse hands in Rock/Paper/Scissors poses. It is license…

www.laurencemoroney.com

네번째 영상, 이진분류에서 다중분류로 바뀌면서 코드상 변화하는 점들을 살펴볼 것이다.

우선, 디렉토리를 지정해줬다면 이미지 생성기를 생성할 것이다. 코드는 아래와 같고 class_mode만 categorical로 변경해준다.

그림2. 다중 분류  이미지 생성기 

 

이미지 생성기를 생성했다면 그 다음으로 모델을 정의해줍니다. 여기선 출력층에서 클래스 갯수와 활성화함수를 변경해줍니다.

기존에 이진분류일때는 한개 클래스에 시그모이드를 사용했는데 , 이것은 한개는 0에 한개는 1에 가깝게 나타난다는걸 의미합니다.

그러나 다중분류에서는 가위-바위-보 개수만큼 클래스 3으로 지정하고 활성화함수는 softmax를 사용해서 3개 출력값을 확률로 바꿔줍니다.

그림3. 다중 분류  모델 정의

 

마지막으로 모델을 컴파일해줍니다. 이 때, 손실함수를 기존 binary_crossentropy -> categorical_crossentropy로 변경해줍니다.

그림4. 다중 분류 모델 컴파일

다섯번째 읽기자료, 위에서 살펴본 코드를 이제 노트북에서 확인합니다.

gist.github.com/jonhyuk0922/a807984f3a6c86fe00bbb483a64fab28

 

Course 2 - Part 8 - Lesson 2 - Notebook (RockPaperScissors).ipynb

Course 2 - Part 8 - Lesson 2 - Notebook (RockPaperScissors).ipynb - course-2-part-8-lesson-2-notebook-rockpaperscissors.ipynb

gist.github.com

 

여섯번째 영상, 위에 깃허브에 올라온 코드를 실행했을 때, 학습과정에서 유효성 검증값(validation_acc)이 위아래로 흔들리는 것을 볼 수 있다. 그러나 대체적으로 90%이상의 정확도를 보이는데 이는 학습에 사용된 데이터가 강의 시나리오에 맞춰진 양질의 데이터이기 때문이다.

 

일곱번째 읽기자료, 주어진 validation image 33장을 코드 마지막 '가위바위보 분류기'를 사용해서 분류해보기!

 

 

여덟번째 영상, 주어진 이미지 33장을 '가위바위보 분류기'를 통해 분류해봤을 때 좌측 사진 외에는 올바르게 분류하는 것을 볼 수 있다.

(아마 엄지와 검지 모양이 가위와 비슷하고 다른 보자기와 달리 나머지 손가락들이 딱 붙어있어서 가위로 분류한 것 같다.)

 

출력값으로는 [1,0,0] , [0,1,0], [0,0,1] 3가지 중 하나를 출력하는데 이는 알파벳 순서대로 [p,r,s] 즉 [보,바위,가위]를 나타낸다.

eg) [1,0,0]은 분류기가 보(paper)로 분류한 것이다.

 

 

 

 

 

아홉번째 읽기자료, 이제 course2까지 끝났다. 우리는 ML에서 DNN(깊은 신경망)을 만들어서 기본적인 컴퓨터 비전 문제를 해결해봤다.

그다음은 컨볼루션과 풀링 레이어를 만들어서 특징을 추출하는 CNN 모델을 만들었다.

하지만 오버피팅이라는 벽을 만나서 그를 해결하기 위한 증강(Augmentation),전이학습(Transfer learning),드랍아웃(Drop out)과 같은 개념을 배웠다. 마지막으로 이진분류에서 다시 다중분류로 넘어와 가위바위보 분류도 실행해봤다!

 

퀴즈는 이번엔 복습개념이라 딱히 정리할게 없었다.

전이학습을 사용해도 DNN에 증강 사용할 수 있다, 컨볼루션은 이미지의 특징을 추출해내는 기술이다. 증강은 메모리를 사용하지 않는다. 정도로 정리할 수 있다.

 

* 과제 : MNIST 수화 데이터 활용해서 수화 다중 분류기 구축하기!

www.kaggle.com/datamunge/sign-language-mnist

 

Sign Language MNIST

Drop-In Replacement for MNIST for Hand Gesture Recognition Tasks

www.kaggle.com

 

gist.github.com/jonhyuk0922/9efa7c281efe0c087bc8a47428348723

 

Course2 - 4주차 과제(kaggle-Sign Language MNIST)

Course2 - 4주차 과제(kaggle-Sign Language MNIST). GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

쉽지 않았다 ..

 

반응형