혼공 머신러닝/딥러닝 #8

한 달 만에 올린다. 일정관리를 안 하니 한없이 늘어지는 Magic..

이번 장에서는 이미지 분류 문제에 적용할 수 있는 CNN(Convolution Neural Network)에 대해 학습했다. 과정에서 패션 MNIST 데이터 세트를 샘플로 다루었다.

합성곱 신경망의 구성 요소

합성곱

  • 이미지에서.. 유용한 특성만 드러나게 하는 것?
  • 밀집층에는 입력 개수만큼의 가중치가 있음(모든 입력에 가중치를 곱함)
  • 합성곱은 대신 일부에 가중치를 곱함
  • 전체 입력 데이터에..합성곱의 가중치 만큼 씩만 곱하면서 전체 입력 데이터를 계산.
  • 가중치는 그대로 사용.
  • Window 같은거.
  • 10개 입력 x 3개 가중치 = 8개 출력(0~2, 1~3, 2~4, 3~5, …)
  • 가중치 개수는 Hyperparam
  • CNN에서는 뉴런을 필터(filter) 또는 커널(kernel) 이라고 부름, 출력은 특성 맵(feature map)이라고..
  • 2차원에도 적용할 수 있다. 필터를 2차원으로 만들면 되니까
  • 각각의 특징을 잡아내는 여러 개의 필터를 사용.
  • 입력보다 훨씬 작은 크기(보통 3×3, 5×5)의 커널을 사용, 왼→오, 위→아래 방향으로 이동
  • 그래서 이미지 처리에 뛰어난 성능..
  • 합성곱 신경망 = 1개 이상의 합성곱 층을 쓴 인공신경망
    • 모두 합성곱 층만 쓰는건 아님. 출력층 앞에 밀집층 두는 게 일반적(클래스 확률 계산)
  • 패딩
    • 구석 애들은 계산에서 소외되네? 빈 칸으로 둘러쌓주자.
    • 입력 크기와 특성 맵 크기가 같아 지도록 하는 경우가 많다..
  • 스트라이드
    • 몇 칸씩 이동?
    • 대부분 그냥 1로
  • 풀링(pooling)
    • 특성 맵의 가로세로 크기를 줄이는 역할
    • 가중치 없는 커널
    • 큰 값(max pooling) 또는 평균 값(average pooling)
    • 합성곱과 다르게 겹치지 않고 이동
    • keras.layers.MaxPool2D
  • 전체 구조
      • 합성곱 필터
      • 필터의 갯수는.. → 클래스의 종류(다른 의미는 없나?)
  • 컬러 이미지 → 3차원 → 필터도 3차원. 케라스도 기본 3차원을 기대.
  • 풀링 층 다음에 다시 합성곱을 배치하기도 함.
  • 그래서..합성곱 신경망은 너비와 높이가 점점 줄어들고 깊이는 점점 깊어지는 특징이 있다
  • 합성곱 .. 기능적으로는
    • 이미지에 있는 어떤 특징을 찾는다..
    • 처음에는 간단한 특징을 찾고
    • 층이 깊어질수록 다양하고 구체적인 특징을 감지할 수 있도록 필터의 갯수를 늘림.
    • 위치에 상관없이 감지할 수 있도록 너비와 높이 차원을 줄임.

합성곱 신경망을 사용한 이미지 분류

  • 이미지 분류 신경망 구조
    • 합성곱 층으로 이미지에서 특징을 감지 → 밀집층으로 클래스에 따른 확률 계산
  • keras.layers.Conv2D
  • keras.layers.MaxPool2D
    • 입력의 너비와 높이를 줄이는 역할
    • 전형적인 크기 (2,2) 왜지? → 1/2로 줄어든다.
  • 여러 층의 합성곱으로 구성
    • 첫 번째 층은 이미지의 직접적인 특징을 감지
    • 두 번째 층은 첫 번째 층에서 감지한 특징을 보다 추상화한 형태로 감지
    • 32개의 필터를 입력 받아서 64개의 필터로..
  • plot_model 로 그릴 수 있다. summary
  • 옵티마이저, 손실함수, 콜백(ModelCheckpoint, EarlyStopping) 지정 후 학습
    • optimizer=’adam’, loss=’sparse_categorical_crossentropy’

합성곱 신경망의 시각화

  • 합성곱 신경망은 이미지에 있는 특징을 찾아 압축하는 데 뛰어난 성능을 발휘
  • keras에서 모델을 만들 때 Sequential 말고 함수형 API로 만들 수도 있다.
    • 중간중간 결과를 알고 싶을 때는 함수형 API가 더 편하다.
  • 필터(커널)의 역할 : 이미지의 어떤 특징을 크게 두드러지게 표현하는 역할
  • 함수형 API : Model 클래스
    • Sequential 대신..
    • 좀 더 복잡한 모델을 생성할 때 사용
    • 이미 만들어진 모델에서 새로운 모델을 만들 때도 사용
    • 예제
    inputs = keras.Input(shape=(784,)) dense1 = keras.layers.Dense(100, activation='sigmoid') dense2 = keras.layers.Dense(10, activation='softmax') hidden = dense1(inputs) outputs = dense2(hidden)
    • inputs는 InputLayer의 출력
    • Input() 함수

  • 합성곱 층을 쌓을수록 뒤쪽에 있는 층에서는 앞쪽에서 감지한 시각적인 정보를 바탕으로 추상적인 정보를 학습한다(고 볼 수 있다)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다