혼자 만들면서 공부하는 딥러닝 1-2 합성곱 신경망(CNN) 모델 이해하기: 풀링층과 밀집층
풀링층과 밀집층
혼자 만들면서 공부하는 딥러닝 1-2 합성곱 신경망(CNN) 모델 이해하기
인공 신경망 ANN Artificial Neural Network입력층, 은닉층, 출력층을 거쳐 데이터를 처리합니다. 합성곱 신경망보다 간단한 분류 작업 및 예측에 활용됩니다.사람의 신경망 구조를 본따서 만든 기계학
kmina02.tistory.com
풀링층과 밀집층에 대한 개념 설명은 이전 글에 적어두었습니다. 이번 글에서는 케라스에서 어떤 클래스를 이용해서 풀링층과 밀집층을 구현하는지에 대해 정리하겠습니다.
합성곱층 Conv2D
혼자 만들면서 공부하는 딥러닝 1-2 합성곱 신경망(CNN) 모델 이해하기: 합성곱층 Conv2D
패딩 Padding합성곱 연산을 통해 얻어진 결과에서 가장자리에 빈 공간을 추가합니다. 패딩을 이용하면 이미지 가장자리 부분의 픽셀이 충분히 처리될 수 있습니다.패딩을 하지 않았다면 빨간색으
kmina02.tistory.com
이전 글에 적어두었습니다.
풀링층 AveragePooling 2D / MaxPooling 2D
합성곱층 Convolutional Layers 에서는 스트라이드, 커널 크기, 패딩 등을 지정했습니다. 이와 유사하게 풀링층 Pooling Layers 에서도 스트라이드, 풀링 윈도 크기, 패딩 등을 지정할 수 있습니다.
1. 스트라이드, 풀링 윈도 크기
풀링층은 항상 스트라이드 크기 = 풀링 윈도 크기입니다. 즉, 풀링 윈도가 겹쳐서 이동하지 않는다는 겁니다.
풀링 윈도 크기만 매개변수로 명시하고 스트라이드 크기는 명시하지 않으면, 자동으로 스트라이드 기본값 strides = 'None'이 들어가서 알아서 스트라이드 크기를 풀링 윈도 크기와 동일하게 지정합니다.
pool1 = layers.AveragePooling2D(pool_size=2)
pool2 = layers.AveragePooling2D(pool_size=3)
print(pool1(x).shape) # (10, 14, 14, 1)
print(pool2(x).shape) # (10, 9, 9, 1)
풀링 윈도 크기를 2, 3으로 다르게 설정했을 때 풀링 윈도 크기가 클 때(3일 때) 차원이 더 작아집니다.
2. 패딩
풀링은 그저 최댓값/평균값을 통해 정보를 압축하는 목적을 갖고있기 때문에, 가장자리의 정보를 보존하는 패딩 과정이 불필요합니다.
결론적으로 풀링 윈도 크기만 지정해주면 됩니다!
밀집층 Dense
밀집층 클래스는 이름이 Dense로 간단하네요. 밀집층은 입력의 점곱 Dot Product를 수행합니다.
W는 커널 Kernel, 가중치 Weight 라고 하고 b는 편향 Bias라고 합니다. 밀집층의 커널 크기는 (입력 크기, 유닛 개수)입니다. 여기서 유닛은 출력 크기라고 봐도 무방하겠네요.
*유닛 Unit = 특정 계산 수행하고 다음 층에 전달. 특징 정보를 뽑아 내는 작은 연산 단위
dense1 = layers.Dense(3) # 유닛의 크기는 3
import numpy as np
x2 = np.array([[5, 7]])
print(dense1(x2).shape) #(1, 3)
이 코드를 통해 크기가 (2, 3)인 커널을 이용해서 점곱을 수행했습니다.
# 가중치 확인
print(dense1.get_weights())
# 가중치 설정
dense1.set_weights([
np.array([[1, 2, 3], [4, 5, 6]]), # 커널
np.array([0, 0, 0]) # 절편
])
참고로 가중치의 값을 확인하고, 지정하는 함수는 get_wieghts(), set_weights()입니다. 가중치를 설정하기 전에는 0~1 사이의 난수로 설정되어 있습니다.
점곱 수행과정을 수기로 적어보았습니다.
혼자 만들면서 공부하는 딥러닝 1주차 모두 공부하는데 4시간정도 걸렸어요.. 주말에 공부하니까 시간제약없이 쭉 앉아서 공부하니까 좋네요!