16. 합성곱 신경망의 시각화

yellowsubmarine372·2024년 8월 6일
1

머신러닝

목록 보기
16/18

1. 가중치 시각화
가중치는 입력 이미지의 2차원 영역에 적용되어 어떤 특징을 크게 두드러지게 표현하는 역할을 함.(활성화 역할)

이미지 출처 : 혼자 공부하는 머신러닝 
  • 1번째 합성곱 층의 모든 가중치와 모든 절편

(1) 크기

[Output]
(3, 3, 1, 32) (32,)

(2) 가중치 평균 및 표준 편차

conv_weights = conv.weights[0].numpy()

print(conv_weights.mean(), conv_weights.std())
[Output]
-0.014383553 0.23351653

(3) 가중치 분포
가중치가 어떤 패턴을 학습하려는지 파악할 수 있다. (가중치 분포는 어떤 패턴을 학습하기 위해 편향되어 있다

(4) 32개의 커널(도장!)을 시각화

최댓값은 밝고, 최솟값은 어둡다. 양수 및 음수 영역에 따라 특정 패턴을 학습한다(가중치를 줌으로서)

초기화 상태

  • 히스토그램
    균등 분포 (가중치가 초기화된 상태이기 때문)
  • 커널 시각화
    큰 변화가 없는 초기화된 패턴

2. 함수형 API
2번째로 시각화 해볼 수 있는 것은 특성 맵
특성맵을 시각화하기 위해서는 합성 층 중간 단계의 Output이 필요함 → Sequential 클래스 대신 functional API를 사용

최종 결과가 아닌 Conv2D의 중간 결과가 필요함

model.inputmodel.layers[0].output 을 연결하는 새로운 conv_acti 모델을 생성해야 됨


3. 특성 맵 시각화

  • 1번째 특성맵 출력 시각화 (imshow 메서드 이용)
fig, axs = plt.subplots(4, 8, figsize=(15,8))

for i in range(4):
    for j in range(8):
        axs[i, j].imshow(feature_maps[0,:,:,i*8 + j])
        axs[i, j].axis('off')

plt.show()

  • 2번째 합성곱층이 만든 특성 맵

특정한 패턴을 파악하기 어려움을 확인 가능

저수준 학습에서는 단순한 패턴, 색깔을 인식하기 때문에 이해하기 쉬워 시각화가 유용하다. 다만 고수준 층으로 갈 수록 추상적인 것을 인식하기 때문에 이해하기 어려워 시각화가 유용하지 않을 수도 있다.

profile
for well-being we need nectar and ambrosia

0개의 댓글