Machine Learning/Basic

[8-3] 합성곱 신경망의 시각화(2)

jwjwvison 2021. 4. 15. 23:32

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다.


특성 맵 시각화

 케라스로 패션 MNIST 데이터셋을 읽은 후 훈련 세트에 있는 첫 번째 샘플을 그려 보자.

(train_input,train_target),(test_input,test_target) = keras.datasets.fashion_mnist.load_data()
plt.imshow(train_input[0],cmap='gray_r')
plt.show()

 앵클 부츠이다. 이 샘플을 conv_acti 모델에 주입하여 Conv2D층이 만드는 특성 맵을 출력해 보자. 앞에서도 설명했지만 predict() 메서드는 항상 입력의 첫 번째 차원이 배치 차원일 것으로 기대한다. 하나의 샘플을 전달하더라도 꼭 첫 번째 차원을 유지해야 한다. 이를 위해 슬라이싱 연산자를 사용해 첫 번째 샘플을 선택한다. 그다음에 (784,) 크기를 (28,28,1) 크기로 변경하고 255로 나눈다.

inputs=train_input[0:1].reshape(-1,28,28,1) / 255.0
feature_maps=conv_acti.predict(inputs)
print(feature_maps.shape)

 세임 패딩과 32개의 필터를 사용한 합성곱 층의 출력이므로 (28,28,32) 이다. 첫 번째 차원은 배치 차원이라는 점을 기억하라. 샘플을 하나 입력했기 때문에 1이 된다.

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()

 

 이 특성 맵은 32개의 필터로 인해 입력 이미지에서 강하게 활성화된 부분을 보여 준다.

 

 두 번째 합성곱 층이 만든 특성 맵도 같은 방식으로 확인할 수 있다. 먼저 model 객체의 입력과 두 번째 합성곱 층인 model.layers[2]의 출력을 연결한 conv2_acti 모델을 만든다.

conv2_acti=keras.models.Model(model.input,model.layers[2].output)

 

 그다음 첫 번째 샘플을 conv2_acti 모델의 predict() 메서드에 전달한다.

inputs=train_input[0:1].reshape(-1,28,28,1) / 255.0
feature_maps=conv2_acti.predict(inputs)

print(feature_maps.shape)

 

fig,axs=plt.subplots(8,8,figsize=(12,12))
for i in range(8):
  for j in range(8):
    axs[i,j].imshow(feature_maps[0,:,:,i*8 + j])
    axs[i,j].axis('off')
plt.show()

 이 특성 맵은 시각적으로 이해하기 어렵다. 왜 이런 결과가 나올까?

 

 두 번쨰 합성곱 층의 필터 크기는 (3,3,32) 이다. 두 번쨰 합성곱 층의 첫 번째 필터가 앞서 출력한 32개의 특성 맵과 곱해져 두 번째 합성곱 층의 첫 번째 특성 맵이 된다. 다음의 그림처럼 이렇게 계산된 출력은 (14,14,32) 특성 맵에서 어떤 부위를 감지하는지 직관적으로 이해하기 어렵다.

 이런 현상은 합성곱 층을 많이 쌓을수록 심해진다. 이를 바꾸어 생각하면 합성곱 신경망의 앞부분에 있는 합성곱 층은 이미지의 시각적인 정보를 감지하고 뒤쪽에 있는 합성곱 층은 앞쪽에서 감지한 시각적인 정보를 바탕으로 추상적인 정보를 학습한다고 볼 수 있다. 합성곱 신경망이 패션 MNIST 이미지를 인식하여 10개의 클래스를 찾아낼 수 있는 이유가 바로 여기에 있다.

 

 

결론


 이번 시간에는 이전에 훈련하여 저장한 합성곱 신경망 모델을 읽어 들인 후 이 모델의 가중치와 특성 맵을 시각화해보았다. 이를 통해 합성곱 층이 어떻게 입력에서 특성을 학습시키는지 관찰할 수 있었다.

 입력에 가까운 합성곱 층은 이미지에서 시각적인 정보나 패턴을 감지하도록 훈련된다. 이어지는 합성곱 층은 이런 시각적인 정보를 활용해 조금 더 고차원적인 개념을 학습한다. 층이 추가될수록 이런 현상은 더욱 강해진다.

'Machine Learning > Basic' 카테고리의 다른 글

[8-3] 합성곱 신경망의 시각화(1)  (0) 2021.04.15
[8-2] 합성곱 신경망을 사용한 이미지 분류  (0) 2021.04.14
[8-1] 합성곱 신경망  (0) 2021.04.14
[7-3] 신경망 모델 훈련  (0) 2021.04.13
[7-2] 심층 신경망  (0) 2021.04.13