TensorFlow에서 SAME 패딩과 VALID 패딩의 차이
이 보고서는 TensorFlow의 tf.nn.max_pool에서 ‘SAME’ 패딩과 ‘VALID’ 패딩의 차이를 설명합니다. 이 글은 AI 번역본입니다. 오역이 의심되는 부분이 있으면 댓글로 알려주세요.
Created on September 12|Last edited on September 12
Comment
TensorFlow에서 tf.nn.max_pool 입력에 대해 최대 풀링을 수행합니다. 최대 풀링은 입력의 공간 차원을 다운샘플링하여 네트워크 학습에 필요한 파라미터 수와 계산량을 줄이는 데 사용됩니다. 윈도우마다 최댓값을 취하는 방식으로 동작합니다.
tf.nn.max_pool 다음 6개의 인수를 받습니다. input(랭크 N+2 텐서), ksize(입력 텐서의 각 차원에 대한 윈도우 크기), strides(입력 텐서의 각 차원에 대한 슬라이딩 윈도우의 보폭), padding. 패딩 알고리즘은 다음 두 값 중 하나를 사용합니다. VALID 또는 SAME 패딩은 입력 행렬에 값을 덧붙여 수행되며, 패딩에 사용되는 값은 항상 0입니다.
이 두 방식이 어떻게 서로 다른지 살펴보겠습니다.
VALID

~할 때 padding == ”VALID”에서는 입력 이미지에 패딩을 적용하지 않습니다. 즉, 필터 윈도우가 항상 입력 이미지 내부에만 머뭅니다. 이러한 패딩 방식은 다음과 같이 부릅니다. 유효함 왜냐하면 이 패딩에서는 오직 유효함 그리고 입력 이미지의 원래 요소만 고려됩니다. ~할 때 padding == "VALID"정보가 손실될 수 있습니다. 일반적으로 이미지의 오른쪽과 아래쪽에 있는 요소들이 무시되는 경향이 있습니다. 얼마나 많은 요소가 무시되는지는 커널 크기와 스트라이드에 따라 달라집니다.
이 경우 출력 이미지의 크기는 입력 이미지의 크기보다 작거나 같습니다.
만약 padding == "VALID":
output_spatial_shape[i] = ceil((input_spatial_shape[i] - (spatial_filter_shape[i]-1) * dilation_rate[i]) / strides[i])
SAME

~할 때 padding == “SAME”입력의 절반이 패딩됩니다. 스트라이드가 1일 때 출력 크기가 입력 크기와 같기 때문에 이 패딩 유형을 SAME이라고 합니다. ‘SAME’을 사용하면 필터가 입력의 모든 요소에 적용됩니다. 일반적으로 모델을 학습할 때 패딩은 "SAME"으로 설정합니다. 출력 크기는 이후 계산에 수학적으로 편리합니다.
만약 padding == "SAME":
output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])
예제로 패딩을 시각화하기
마지막으로, 두 패딩 옵션이 합성곱에 어떤 영향을 미치는지 시각화해 봅시다:

위 이미지의 첫 번째 그림은 padding="VALID" 필터가 입력 이미지의 경계 안에만 머무르는 경우.
그러면 다음과 같은 속성을 가진 이미지가 있을 때:
- 입력 크기 = 4×4
- 커널 크기 = 2×2
- 스트라이드 크기 = 1 × 1
출력 이미지 크기가 2 × 2임을 확인할 수 있습니다.
두 번째 그림은 보여줍니다 padding="SAME", 출력 이미지의 크기가 입력 이미지와 동일한 경우(스트라이드 = 1).
그러면 다음과 같은 속성을 가진 이미지가 있을 때:
- 입력 크기 = 5 × 5
- 커널 크기 = 5 × 5
- 스트라이드 크기 = 1 × 1
출력 이미지 크기는 5 × 5입니다.
Add a comment