Pooling Layer (풀링 계층) (1)

5단 분석법

순서
분석
단어
내용
1
일반 명사
Pooling
통합, 모으다(pool)의 현재 분사
Layer
막, 층, 겹
Pooling Layer
통합한 막, 층, 겹?
2
고유 명사
Pooling Layer
CNN에서 중요한 특징을 추출해서 불필요한 내용을 줄이는 역할을 하는 레이어
3
사용 이유
Pooling Layer
불필요한 부분은 학습에서 제외하고 중요한 특징 부분만 가져와서 학습하기 위해서
4
사용 방법
Pooling Layer
1. 라이브러리 임포트 2. 가상 데이터셋 생성 및 전처리 3. Sequential 모델 생성 4. Conv2D 레이어 추가 5. MaxPooling 레이어 추가 6. 추가 레이어 7. 모델 컴파일 8. 모델 훈련 9. 모델 평가
5
다른 기술과의 비교
Pooling Layer
-

정의

일반 명사

Pooling
통합, 모으다(pool)의 현재 분사
Layer
막, 층, 겹
Pooling Layer
통합한 막, 층, 겹?
Pooling은 통합, 모으다 라는 뜻을 가지고 있습니다.
Layer는 막, 층, 겹이라는 뜻입니다.
Pooling Layer는 통합한 막, 층, 겹이라고 추측해 볼 수 있습니다.
정말 그런지, 고유 명사를 한 번 알아볼까요?

고유 명사

Pooling Layer
컨볼루션 신경망에서 입력 특징 맵의 공간 크기를 줄여 계산량을 감소시키고, 중요한 특징을 추출하며, 과적합을 방지하는 역할을 하는 레이어
Pooling Layer는 컨볼루션 신경망에서 입력 특징 맵의 공간 크기를 줄여 계산량을 감소시키고, 중요한 특징을 추출하며, 과적합을 방지하는 역할을 하는 레이어 입니다.
출처 : 링크
Pooling Layer에는 주요 유형인 Max Pooling과 Average Pooling이 있습니다.
Max Pooling은 풀링 영역 내에서 가장 큰 값을 선택하는 기법입니다. 주로 이미지의 가장 강력한 특징을 추출하고, 위치 불변성을 유지하기 위해 사용됩니다.
Average Pooling 풀링 영역 내의 값들의 평균을 선택하는 기법입니다. 주로 특징 맵의 정보를 평탄하게 만들고, 과적합을 방지하기 위해 사용됩니다.
Pooling Layer는 특정 feature(특징)를 강조하는 용도로 사용합니다.
또한, 입력데이터의 변화에 민감하게 반응하지 않는 특징을 가지고 있습니다.
정리해보자면,
Pooling Layer는 input(입력 데이터)에 특정한 특징이 포함되어 있는지 판단하기 위해 주위를 뭉뚱그려서 처리하는 레이어 입니다.
맥스 풀링과 평균 풀링 사용이유를 더 알려주세요
맥스 풀링 (Max Pooling):
특징 강조: 풀링 영역 내에서 가장 큰 값을 선택하여 중요한 특징을 강조합니다.
차원 축소: 입력 데이터의 크기를 줄여 연산량을 감소시키고, 과적합을 방지합니다.
위치 불변성: 입력 데이터의 작은 위치 변화에 강인합니다.
노이즈 제거: 노이즈나 변동의 영향을 줄일 수 있습니다.
평균 풀링 (Average Pooling):
정보 보존: 풀링 영역 내의 값들의 평균을 계산하여 전체 정보를 보존합니다.
차원 축소: 입력 데이터의 크기를 줄여 연산량을 감소시키고, 과적합을 방지합니다.
평균화: 값들이 특정 영역에 치우치지 않도록 균형을 맞춥니다.
노이즈 완화: 국소 영역의 작은 변동이나 노이즈를 완화할 수 있습니다.

사용 이유

Pooling Layer
불필요한 부분은 학습에서 제외하고 중요한 특징 부분만 가져와서 학습하기 위해서
Pooling Layer를 사용하는 이유는 불필요한 부분은 학습에서 제외하고 중요한 특징 부분만 가져와서 학습하기 위해서 입니다.
Pooling Layer는 LSTM의 망각(forget)과 비슷한 개념이라고 생각하시면 됩니다.
이유
설명
계산량 감소
입력 데이터의 크기를 줄여 모델의 연산 효율성을 높입니다.
불변성 확보
위치와 크기 변화에 대한 불변성을 제공하여 모델의 일반화 능력을 향상시킵니다.
과적합 방지
데이터의 복잡성을 줄여 과적합을 방지합니다.
중요한 특징 추출
중요한 특징을 강조하고 노이즈를 감소시킵니다.

사용 방법

Pooling Layer
1. 라이브러리 임포트 2. 모델 생성 3. 모델 컴파일 4. 모델 훈련 5. 모델 평가

TensorFlow (Keras)

PyTorch

미니퀘스트

1번 미니퀘스트 - Max Pooling Layer를 사용한 특징 맵 크기 감소

Max Pooling Layer가 어떻게 입력 특징 맵의 크기를 줄이는지 시각적으로 확인해보세요.

문제 설명

1.
라이브러리 임포트
2.
입력 이미지 생성
데이터 정보
# 6x6 크기의 가상 이미지 생성 input_image = np.array([ [1, 1, 2, 4, 5, 6], [1, 3, 3, 2, 1, 1], [4, 6, 1, 1, 2, 3], [3, 4, 2, 1, 5, 6], [5, 2, 3, 4, 4, 3], [1, 1, 2, 2, 3, 4] ]).reshape(1, 6, 6, 1) # (batch_size, height, width, channels)
Python
복사
3.
Max pooling Layer 적용
4.
결과 시각화

코드

import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.layers import MaxPooling2D, Input from tensorflow.keras.models import Model # 6x6 크기의 가상 이미지 생성 input_image = np.array([ [1, 1, 2, 4, 5, 6], [1, 3, 3, 2, 1, 1], [4, 6, 1, 1, 2, 3], [3, 4, 2, 1, 5, 6], [5, 2, 3, 4, 4, 3], [1, 1, 2, 2, 3, 4] ]).reshape(1, 6, 6, 1) # (batch_size, height, width, channels) # 모델 생성 inputs = Input(shape=(6, 6, 1)) x = MaxPooling2D(pool_size=(2, 2), strides=2)(inputs) model = Model(inputs, x) # Pooling 적용 output_image = model.predict(input_image) # 입력 이미지 시각화 plt.subplot(1, 2, 1) plt.title("Input Image") plt.imshow(input_image[0, :, :, 0], cmap='gray') plt.axis('off') # 출력 이미지 시각화 plt.subplot(1, 2, 2) plt.title("Pooled Image") plt.imshow(output_image[0, :, :, 0], cmap='gray') plt.axis('off') plt.show()
Python
복사

결과 설명

Max Pooling Layer가 입력 이미지의 크기를 어떻게 줄이는지 확인할 수 있습니다.
입력 이미지는 6x6 크기였지만, Max Pooling을 적용한 결과 출력 이미지는 3x3 크기로 줄어들었습니다.
Max Pooling Layer가 입력 이미지의 가장 큰 값을 선택하여 크기를 줄이는 방식으로 동작하기 때문입니다.

코드 설명

2번 미니퀘스트 - 다양한 Pooling 기법 실습

Max Pooling과 Average Pooling 두 가지 기법을 비교해보세요.

문제 설명

1.
라이브러리 임포트
2.
입력 이미지 생성
데이터 정보
# 6x6 크기의 가상 이미지 생성 input_image = np.array([ [1, 1, 2, 4, 5, 6], [1, 3, 3, 2, 1, 1], [4, 6, 1, 1, 2, 3], [3, 4, 2, 1, 5, 6], [5, 2, 3, 4, 4, 3], [1, 1, 2, 2, 3, 4] ]).reshape(1, 6, 6, 1) # (batch_size, height, width, channels)
Python
복사
3.
Pooling 적용
4.
결과 시각화

코드

import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.layers import MaxPooling2D, AveragePooling2D, Input from tensorflow.keras.models import Model # 6x6 크기의 가상 이미지 생성 input_image = np.array([ [1, 1, 2, 4, 5, 6], [1, 3, 3, 2, 1, 1], [4, 6, 1, 1, 2, 3], [3, 4, 2, 1, 5, 6], [5, 2, 3, 4, 4, 3], [1, 1, 2, 2, 3, 4] ]).reshape(1, 6, 6, 1) # (batch_size, height, width, channels) # 입력 텐서 정의 inputs = Input(shape=(6, 6, 1)) # Max Pooling 모델 생성 max_pooling = MaxPooling2D(pool_size=(2, 2), strides=2)(inputs) max_pooling_model = Model(inputs, max_pooling) # Average Pooling 모델 생성 avg_pooling = AveragePooling2D(pool_size=(2, 2), strides=2)(inputs) avg_pooling_model = Model(inputs, avg_pooling) # Pooling 적용 max_pooled_image = max_pooling_model.predict(input_image) avg_pooled_image = avg_pooling_model.predict(input_image) # 입력 이미지 시각화 plt.subplot(1, 3, 1) plt.title("Input Image") plt.imshow(input_image[0, :, :, 0], cmap='gray') plt.axis('off') # Max Pooling 결과 시각화 plt.subplot(1, 3, 2) plt.title("Max Pooled Image") plt.imshow(max_pooled_image[0, :, :, 0], cmap='gray') plt.axis('off') # Average Pooling 결과 시각화 plt.subplot(1, 3, 3) plt.title("Avg Pooled Image") plt.imshow(avg_pooled_image[0, :, :, 0], cmap='gray') plt.axis('off') plt.show()
Python
복사

결과 설명

Max Pooling
입력 이미지에서 가장 큰 값을 선택하여 특징 맵의 크기를 줄입니다.
이는 중요한 특징을 강조하고, 공간적 위치에 대해 불변성을 제공합니다.
Average Pooling
입력 이미지에서 평균값을 계산하여 특징 맵의 크기를 줄입니다.
이는 이미지의 전반적인 특징을 보존하면서 크기를 줄이는 데 효과적입니다.
Max Pooling은 이미지의 가장 두드러진 특징을 보존하는 데 유리하며, Average Pooling은 이미지의 평균적인 특징을 유지하는 데 유리합니다.

코드 설명

미니퀘스트 답안지

ⓒ 2024 startupcode. 모든 권리 보유. 무단 복제 금지.