ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Keras Cat Dog 분류 - 6. 딥러닝 시작하기 - 모델 구성
    주제를 딱히 정하기 싫을때 2019. 6. 13. 21:35

    설치 부터 실제 분류까지 keras로

     Cat과 Dog 데이터 셋으로 끝까지 해보기 

     

    2019/06/13 - [주제를 딱히 정하기 싫을때] - Keras Cat Dog 분류 - 5. 딥러닝 시작하기 - 콜백 함수

     

    Keras Cat Dog 분류 - 5. 딥러닝 시작하기 - 콜백 함수

    설치 부터 실제 분류까지 keras로 Cat과 Dog 데이터 셋으로 끝까지 해보기 2019/06/13 - [주제를 딱히 정하기 싫을때] - Keras Cat Dog 분류 - 4. 딥러닝 시작하기 - 훈련 데이터 분류하여 복사하기 Keras Cat Dog..

    redapply.tistory.com

     

    8 모델 구성하기

     

    • 필요한 라이브러리

      • keras.Input

        • Input을 받아 시작된 모든 레이어를 자동으로 검색하여 모델을 구성합니다.

        • 함수형 모델이라고 합니다.

        • 지금은 한개의 모델만 사용 되지만

                           나중에 두개 이상의 모델을 동시에 사용할 수 있도록 도와줍니다. 

        • 우리는 단지 Input(배열 모양, name ="별명이름') 만 구성 해주면 됩니다.

          • (높이, 폭, 채널수) 

          • 채널수 흑백은 1, 컬러면 3 

        • 그리고 시작과 끝을 models.Model( ) 에 적용 해주면 끝납니다.

     

    • 기본 조건 설정 

      • batch_size 

        • 메모리 용량의 한계로 데이터를 나눠서 훈련합니다.

      • no_classes 

        • 출력수를 나타냅니다

        • 여기에서는 출력수가 1 (고양이 또는 개) 이므로 1 로 하였습니다.

      • epochs 

        • 데이터를 몇 번 학습 시킬지 정합니다.

        • 많이 한다고 좋아지는 것은 아니지만 부족하면  과대 적합 발생이 높아집니다.

      • image_heigth, image_width 

        • 이미지 사이즈 크기를 정합니다.

        • 이미지규격은  전부 다르기 때문에 통일 시켜줍니다.

      • input_shape 

        • 이미지이 사이즈 및 채널 수 입니다.

        • 채널수가 1이면 흑백

        • 채널수가 3이면 컬러 입니다.

     

    • 함수형 모델

      • 이 컨볼루션2D 모델은 이미지 관련된 레이어 입니다.

      • filters는 일종의 신경망 층이 (깊이) 라고 봐도 무방합니다.

      • kernel_size는 분석해야하는 단위 크기를 뜻합니다.

        • 이는 커널 크기는  합성곱을 통해서 특징을 추출 합니다.

        • 일반적으로 3*3 또는 5*5 크기를 사용합니다. (높이 , 폭)

      • padding

        • 입력과 동일한 높이와 출력을 가지고 싶을 때 사용합니다.

        • 'same' 은 똑같음 , 'valid' 사용 안함

      • stride 

        • 커널 한번에 이동할 칸수 

        • 기본은 1칸씩 이동 하여 추출

      • MaxPooling2D

        • 최대 풀링은 윈도우 크기중에 최대값만  뽑아 내어 다운샘플링 합니다.

        • pool_size=(2,2)

      • Dropout

        • 드랍 아웃은 무작위로 층의 일부를 0으로 만듭니다.

        • 이는 훈련 데이터에 특화된 과대 적합을 일부 막아주는 효과가 있습니다.

      • Flatten()

        • 1차원으로 만들어 줍니다.

      • Dense()

        • 입출력을 모두 연결해줍니다.

        • units 는 뉴런 수 입니다.

      • activation

        • 활성화 함수이며 직선을 곡선으로 바꿔 주는 역활을 합니다.

        • relu, sigmoid,softmax 등이 있습니다

        • 최종 출력층에 sigmoid를 사용하여 0과 1사이의 실수로 출력합니다.

        • 여기에선 0과 가까우면 고양이 1에 가까우면 개 입니다.

      • loss 

        • 최적화 함수를 평가합니다.

        • 이진문제 즉, 개와 고양이는 정답이 둘 중에 하나 이므로  'binary_crossentropy'를 사용합니다.

      • optimizer

        • 최적의 가중치를 검색합니다.

          • rmsprop(), adam() 을 주로 사용합니다.

          • 대체로 rmsprop가 무난하다고 합니다.

      • metrics

        • 모델을 평가를 합니다.

        • 이진 분류에서는 보통 ['acc'] 즉 정확도를 사용합니다.

     

    9 데이터 전처리

      • 훈련하기 전에 데이터를 전처리 해야합니다.

      • 컴퓨터가 분석할 수 있도록 만들어 줘야 되며

      • 표준화 시켜서 데이터의 기준을 공평하게 해야 올바른 분석이 됩니다.

      • 이를  특성엔지니어링이라 합니다.

     

    • 필요한 라이브러리

      • from keras.preprocessing.image import ImageDataGenerator

        • 스케일조정, 데이터 증식,배열변환, 데이터 부족시 유용한 모듈입니다.

        • 나중을 위해 지금부터 사용하는것이 좋습니다.

        • rescale = 1./255 이미지 스케일을  조정합니다.

        • 데이터 증식 - 지정 숫자 안에서 무작위 변환 

          • rotaion_range  - 회전 각도

          • width_shift_range - 좌우 이동 

          • horizontal_flip - 이미지 뒤집기

          • 훈련 데이터만 증식을 제한합니다.

          • 검증이나 테스트 데이터는 데이터 증식을 하면 안됩니다.

          • 지금은 스케일만 조정합니다.

      • flow_from_direction()

        • 해당 디렉토리를 탐색하여 디렉토리명이 레이블로 지정 됩니다.

          • 기본적으로 알파벳순 [cat,dog] 의 0 과 1이 됩니다.

          • flow_from_direction(classes=['dog','cat']) 하면 dog 0, cat 1 이 됩니다.

        • class_mode 는 이진이면 "binary" , 원핫코딩은 "categorical" 기본설정

        • 또한 해당 안의 파일들은 훈련대상이 되어 데이터 증식, 표준화등 작업을 하게 됩니다.

      • from PIL import Image

        • 이미지 처리 라이브러리 입니다.

        • 여기에선 직접 사용이 아닌 케라스가 필요로 합니다.

    • 훈련

      • 훈련하고자 하는  모델  객체로 만듭니다.

      • newType_model = cnn_api(input_shape)

      • fit_generator를 통해 훈련합니다.

        • steps_per_epoch는  총 훈련데이터 수 // 원하는 배치크기

        •   validation_steps 는 총 검증데이터 수 // 원하는 배치크기

        • callbacks - 이전에 정의한 콜백함수

     

     

    모든 준비가 완료 되었습니다.

    그럼 시작해 볼까요.

     

    • 훈련 평가 확인 

      • hist.history['acc'] - 훈련 데이터 정확도

      • hist.history['val_acc'] - 검증 데이터 정확도

      • hist.history['loss'] - 훈련 데이터 손실률

      • hist.history['val_loss'] -검증 데이터 손실률

    • matplotlib 그래프로 확인

      • 39에포크에서 훈련이 멈췄습니다.

      • 이는 콜백함수에서 지정했기 때문입니다.

      • 훈련평가와 검증평가의 차이가 많이 납니다.

      • 과대 적합입니다.

      • 그리고 정확률이 75% 정도로 많이 낮습니다.

     

     

     

     

     

     

    다음 절에서 텐셔보드를 사용해 봅시다

    수고하셨습니다.

    Keras Cat Dog 분류 - 딥러닝 시작하기 .ipynb
    0.05MB

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.