[Numpy] Pooling, Average_Pooling 방법 및 설명

2021. 3. 27. 20:57업무 스킬/Python(파이썬)

728x90

1. Pooling 이란?

이해하기 쉽게 아래 그림을 보면 예를 들어  10 x 10의 Array를

두꺼운 테두리를 기준으로 5 x 5로 바꾸는 것을 말한다.

즉, 기존의 Array를 그 반의 크기로 변환하는데

거기에 계산 값이 들어가는 것이다.

종류는 평균 값을 내는 Average Pooling이 있고 하고 싶으면 Variance(분산)이나

다른 값을 내도 된다.

 

2. 예시 코드 보기.

예시 코드를 보자 코드는 VS Code에서 작성했다.

아래는 전체 코드다.

 

순서대로 보면

 

1. average_pooling의 함수를 정의해주고 값은 Array값을 받아온다.

나는 arr로 표기하였다.

 

2. Array의 Shape를 Tuple 형태로 받아준다.

그 후에 Array의 크기를 2로 나눠준 값을 정의하여,  새로운 Shape를 지정해줄 준비를 한다.

 

3. 이 부분이 조금 어렵다. 잘 따라오길 바란다.

받아온 arr를 변환을 해야 하는데. 기존 2차원의 Array를 반으로 나눌 것이기 4차원으로 만들어 준다.

때문에 아래와 같이 식을 쓰는데. 예를 들어 나는 10 x 10을 해줬기 때문에 5 x 2 x 5 x 2 이렇게

나눠줘야한다. 그 후에 (z , x) 축인 axis = (1, 3)으로 계산해줘야 한다.

물론 머리속에서 안 그려질 것이기 때문에 친절한 내가 그림으로 설명해주겠다.

예시 코드 아래 그림을 보자

 

우선 1~100까지의 2차원 10 x 10의 Array가 어떻게 5 x 2 x 5 x2로 변환되는지 숫자를 보면

이렇게 변환된다. 그후에 나는 axis = (1, 3) 즉 Z 축 X축으로 계산했으니

아래 그림처럼 계산되는 거다. 즉, 1 2 11 12가 계산되는 거지. 진짜 너무 친절하게 그림까지 그려줬다.

와 대박 진짜 개고생함. 이해됐으면 감사하다고 댓글 쓰고 가라 진짜

이렇게 봐도 이해 안 가면 그냥 아 나는 코딩이 안 맞는구나 하고 빠른 포기를 추천한다.

 

 

장난이고, 그럼 결과 예시를 보자

위와 같이 작성하고 결과 값을 보면

아래와 같이 나온다. 위의 설명 그림처럼 1, 2, 11 ,12의 Mean값인 6.5가 나온 것을 알 수 있다.

 

첨언으로 왜 Average랑 Mean을 같이 쓰냐고 물어보는 사람이 있는데, 일단 번역하면 둘 다 평균이다.

하지만 Mean의 경우 산술평균, 기하평균, 조화 평균을 모두 포함하는 의미의 평균이고

Average는 거의 산술평균 만을 나타낸다고 보면 된다. 그냥 Mean ⊃ Average다.

평소엔 같은 의미로 써도 큰 무리는 없다.

728x90