데이터과학 삼학년

Image Classification (Linear, DNN, CNN) 본문

Machine Learning

Image Classification (Linear, DNN, CNN)

Dan-k 2020. 6. 2. 14:39
반응형

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' 카테고리의 다른 글

Going Faster and Deeper  (0) 2020.06.02
Dealing with Data Scarcity  (0) 2020.06.02
Graph 기초  (0) 2020.06.02
Isolation Forest (for anomaly detection)  (0) 2020.04.13
Image classification (Linear, DNN, CNN)  (0) 2020.03.04
Comments