-
Keras Cat Dog 분류 - 6. 딥러닝 시작하기 - 모델 구성주제를 딱히 정하기 싫을때 2019. 6. 13. 21:35
설치 부터 실제 분류까지 keras로
Cat과 Dog 데이터 셋으로 끝까지 해보기
2019/06/13 - [주제를 딱히 정하기 싫을때] - Keras Cat Dog 분류 - 5. 딥러닝 시작하기 - 콜백 함수
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 분류 - 8. 딥러닝 시작하기 - 과대적합 (0) 2019.06.13 Keras Cat Dog 분류 - 7. 딥러닝 시작하기 - 텐션보드 사용하기 (0) 2019.06.13 Keras Cat Dog 분류 - 5. 딥러닝 시작하기 - 콜백 함수 (0) 2019.06.13 Keras Cat Dog 분류 - 4. 딥러닝 시작하기 - 훈련 데이터 분류하여 복사하기 (0) 2019.06.13 Keras Cat Dog 분류 - 3. 딥러닝 시작하기 - 데이터 확보및 구성 (0) 2019.06.13 -