데이터과학 삼학년

Image classification (Linear, DNN, CNN) 본문

Machine Learning

Image classification (Linear, DNN, CNN)

Dan-k 2020. 3. 4. 17:54
반응형

Linear Models for Image Classification

- MNIST 데이터에 대한 간략한 소개 : 손글씨 데이터

  > 28*28 = 784의 매트릭스로 구성

  > 각 classification label별로 확률을 예측함 → softmax function

  > sigmoid → binary-classifier 라서 쓸 수 없음

- softmax →멀티 클래스에서 적용

- 모델의 정확도를 향상시키기 위해 loss function을 씀 → 분류문제에서는 cross-entropy 함수 적용

- sequential로 keras model을 만든 다음 compile을 이용해 모델을 만듦

- num_epoch is None이면 계속해서 데이터를 집어 넣는 것을 의미

- custom estimator는 my_model_fn에서 estimatorSpec을 return하는 함수를 model_fn에 입력해주는 방식으로 작동

- tensorflow2.0 → keras는 자동 분산 처리~!

- tensorflow1.x 에서 keras를 분산처리하려면 model_to_estimator에 담아서 하면 됨

  > 카테고리형 변수를 다룰때 conflict가 날 수 있음

 

Deep neural network models for Image Classification

- DNN , fully connected model을 이용해서 학습할 경우, overfitting이 일어날 가능성 높겠지 → 모델이 복잡할 수록

 

Dropout

- 학습 단계에서 dropout을 적용하여 model을 regularization이 가능하도록 만듦

  > overfitting 을 막음

  > test할때는 적용x

  > 제프리 힌튼은 어떻게 dropout을 생각해 냈을까?

    : 은행에 갔는데 은행원들이 계속 바뀌는 것을 발견, 물어봤더니 부정행위를 막기위해 직원들을 여기저기 순환시키면서 일을 시켰다고 함 → 이것에서 아이디어를 얻어서 dropout을 고안해냈다고 함

- dropout layer는 layer를 정의한 이후에 코드를 적어주면 됨 → 코드상으로는 하나의 layer가 들어가는 것처럼 보이도록 되어 있음

- dropout을 keras로 구성할 때

 

Convolutional Neural Networks

- 복잡한 이미지에서 DNN을 쓸 경우, 모델이 처리하기위해 너무 복잡한 형태와 많은 weight를 가지게 됨

- 이미지 인식을 위해 특정 부분을 뽑기 위해 주로 feature engineering을 진행하였음

- 이미지의 특징을 뽑아내기 위해 convolution layer를 적용하여 추출함

- convolution : filter가 움직이면서 가중치합을 결과로 내뱉음 → filter의 값을 학습시키는 것이 CNN의 목적

  > 필터사이즈 : 3x3

  > 스트라이딩 : 움직일 단계(skip steps) → (1,1), (2,2)

  > 맥스풀링 : 커널사이즈 내에서 가장 큰 값 추출

- 필터의 수와 커널사이즈를 다르게 적용할 수 있음(Alexnet)

- 필터의 작동 예

  > edge, bright 등 탐지목적에 따라 적합한 필터가 있음

   > 가로 방향의 선을 detect하는 예

  > 수직 방향의 선을 detect 하는 예

> 복합적으로 kernel을 쓸 경우

- padding → 이미지의 테두리를 0으로 패딩시켜 필터를 거치고 나서의 이미지 크기를 같게 유지할 것인가(input_size=output_size), 아니면 작게 변환할거냐 결정

- stride : 필터의 움직임을 결정

- pooling layer : 필터내에서 어떤 값을 취할 것이냐

  > maxpooling, averagepooling, minpooling

 

- layer의 순서 convolution → pooling → convolution → pooling …

- 케라스 구성 코드

  > flatten 하게 만들때

Column = 높이*너비*깊이(필터수)

reshpe([-1,height*width*n_filters]



728x90
반응형
LIST

'Machine Learning' 카테고리의 다른 글

Graph 기초  (0) 2020.06.02
Isolation Forest (for anomaly detection)  (0) 2020.04.13
ROC, AUC  (0) 2020.02.17
Mutual Information_ 클러스터링 평가 척도  (0) 2020.02.14
tf 2.0 - Keras  (0) 2020.02.03
Comments