ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221205 = 합성곱신경망
    PYTHON 2022. 12. 5. 17:11
    Tensorflow 복습
    
    레이어지정해줄 때
    
    - 회귀나 분류 둘 다 activation function을 지정해주지 않아도 되지만
      분류 문제는 binary, 멀티클래스인지 명시적으로 지정해 주는게 코드를 작성하고 이해하는 데 도움이 된다.
    - 출력층, compile의 loss를 보면 분류인지 회귀인지, 이진분류인지, 멀티클래스인지 판단해 볼 수 있다.
    
    softmax와 sigmoid의 차이는?
    
    - softmax는 n개의 확률값을 반환하고 전체의 합은 1이 된다.
    - sigmoid는 2개 중에 하나를 예측할 때 보통 사용이 된다.
    합성곱 신경망 (Convolutional Neural Network, CNN)
    
    핵심 키워드! Conv, Pooling(Max)!
    
    활성화 함수를 통과한 것이 액티베이션 맵!
    
    컨볼루션 결과로 나온 output이 피처맵!
    
    MaxPooling = 가장 큰 값을 반환
    AveragePooling = 평균 값 반환
    MinPooling = 가장 작은 값 반환
    model.add(layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
    model.add(layers.MaxPooling2D(pool_size=(2, 2)))
    
    1) Convolution 연산을 하면 필터(filters, kernel_size에 해당하는 filters 개수만큼)를 통과시켜서 filters 개수만큼 피처맵을 생성합니다.
    => CNN 의 별명이 피처자동추출기 이기도 합니다. 비정형 이미지를 입력했을 때 이미지를 전처리 하지 않고 그대로 넣어주게 되면 알아서 피처맵을 생성합니다. 피처맵은 피처가 어떤 특징을 갖고 있는지를 나타냅니다.  선이 있는지, ), O, 1, ,  다양한 모양을 랜덤하게 생성해서 통과 시키면 해당 특징이 있는지를 학습하게 하는게 Convolution 연산입니다.
    
    2) 피처맵 Output에 Activation Function (활성화함수)을 통과시켜서 액티베이션맵을 생성합니다.
    => relu 등을 사용하게 되면 출력값에 활성화 함수를 적용한 액티베이션맵을 반환합니다.
    
    3) Pooling 에는 Max, Average, Min 등 여러 방법이 있는데, 보통 MaxPooling 을 주로 사용합니다.
    흑백이미지에서는 MinPooling 을 사용하기도 합니다.
    
    Pooling => 이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 합니다. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 됩니다.
    4) CNN 관련 논문을 보면 이 층을 얼마나 깊게 쌓는지에 대한 논문이 있습니다. VGG16, VGG19 등은 층을 16개, 19개 만큼 깊게 만든 것을 의미합니다. 30~50층까지 쌓기도 하고 100층 정도 쌓기도 합니다. 층의 수를 모델의 이름에 붙이기도 합니다.
    => 과거에 비해 GPU 등의 연산을 더 많이 지원하기 때문에 연산이 빨라진 덕분이기도 합니다.
    DNN의 단점
    
    1) flatten() 으로 1차원 벡터 형태로 주입을 해야 하기 때문에 인접 공간에 대한 정보를 잃어버리게 됩니다. 
    2) 1차원 형태로 주입을 해주게 되면 입력값이 커서 계산이 오래 걸립니다.
    
    CNN의 특징
    
    - Conv과 Pooling 연산을 하게 되면 데이터의 공간적인 특징을 학습하여 어떤 패턴이 있는지를 알게 되며
      Pooling 을 통해 데이터를 압축하면 데이터의 용량이 줄어들며, 추상화를 하기 때문에 너무 자세히 학습하지 않게 됩니다. 오버피팅을 방지해 줍니다. 
    conv2D
    
    conv2D가 하는 일은 이미지-대-이미지 변환입니다.
    4D(NHWC) 이미지 텐서를 또 다른 4D 이미지 텐서로 바꿉니다. (합성곱 층이 특성을 추출하는 기능을 가지고 있기 때문에 합성곱 층의 출력을 일반적으로 특성맵(feature map)  이라고 부릅니다.)
    하지만 기존과 높이, 너비, 채널 개수는 달라질 수 있습니다. (이름이 conv2D인데 4D 텐서를 다룬다는 것이 이상해 보일 수 도 있지만, 배치차원과 채널 차원은 부가적인 부분이라는 것을 유념해야합니다)
    
    좀 더 직관적으로 설명하자면 합성곱 층은 이미지를 흐리게 하거나 선명하게 만드는 간단한 '포토샵 필터 묶음'으로도 이해할 수 있습니다.
    이런 효과들은 입력 받은 이미지 위를 작은 픽셀 조각(합성곱 커널 또는 간단히 커널이라고 부릅니다)이 슬라이딩하는 2D 합성곱으로 만들어지게 됩니다. 슬라이딩 위치마다 커널이 입력 이미지의 겹치는 부분과 픽셀별로 곱해집니다. 그리고 이 픽셀별 곱셈이 모두 더해져서 출력 이미지의 한 픽셀이 됩니다.

    'PYTHON' 카테고리의 다른 글

    20221207 = CNN 복습 및 정리  (0) 2022.12.07
    20221206 = 딥러닝 이미지 분류 개념  (0) 2022.12.06
    20221130 = 딥러닝 복습  (0) 2022.11.30
    20221129 = 딥 러닝 , Tensorflow  (0) 2022.11.29
    20221128 = 분류 측정지표  (0) 2022.11.28
Designed by Tistory.