본문 바로가기
Deep Learning with Python

13_케라스 합성곱 층

by Hot김치 2022. 8. 17.
from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu')
Out[1]:
<keras.layers.convolutional.conv2d.Conv2D at 0x188ebe734c8>

Conv2D 클래스

keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu')

  • 첫번째 매개변수: 필터(도장)의 개수
  • kernel_size: 필터에 사용할 커널의 크기 지정
  • 위에 2개는 반드시 지정해야 하는 매개변수
  • 마지막 활성화 함수 지정
  • 일반적으로 특성맵은 활성화 함수를 통과한 값이다.
  • 커널의 크기, 역시 하이퍼파라미터 => 보통 (3, 3) 혹은 (5, 5)

합성곱 신경망

  • 합성곱 층을 1개 이상 사용한 인공 신경망

패딩과 스트라이드

  • (4, 4) 크기의 입력
  • (3, 3) 크기의 커널을 적용하여 (2, 2) 크기의 특성맵
  • 만약 커널 크기 (3, 3)으로 그대로 두고 출력의 크기를 입력과 동일하게 (4, 4)로 만들려면 어떻게 해야 할까?
    • 마치 더 큰 입력에 합성곱하는 척해야 한다.

(4, 4) 특성맵만들 수 있는 방법

정답! 입력 배열의 주위를 가상의 원소로 채우기 => 패딩

세임 패딩(same padding)

  • 입력과 특성맵의 크기를 동일하게 만들기 위해 입력 주위에 0으로 패딩하는 것을 세임 패딩
  • 합성곱 신경망에서는 세임 패딩이 많이 사용된다.
  • 즉, 입력과 특성맵의 크기를 동일하게 만든다.

밸리드 패딩(valid padding)

  • 패딩없이 순수한 입력 배열에서만 합성곱을 하여 특성맵을 만드는 경우
  • 밸리드 패딩은 특성맵의 크기가 줄어들 수 밖에 없다.
  • 세임 패딩을 즐겨 사용하는 이유?
    • 각 모서리의 3, 7, 3, 8은 커널 도장에 딱 한 번만 찍힌다.
    • 반면 다른 원소들은 2번 이상 커널과 계산
    • 만약 모서리에 있는 중요한 정보가 특성 맵으로 잘 전달되지 않을 가능성이 높다.
    • 반면 가운데 있는 정보는 두드러지게 표현.
    • 왼쪽: 패딩X => 중앙부와 모서리 참여 비율 (4:1) // 오른쪽: 패팅O => 중앙부와 모서리 참여 비율 (9:4)