[용어 정리]
① 가중치 시각화 : 합성곱 층의 가중치를 이미지로 출력하는 것
→ 합성곱 신경망은 주로 이미지를 다루기 때문에 가중치가 시각적인 패턴을 학습하는지에 대해 판단
② 특성 맵 시각화 : 합성곱 층의 활성화 출력을 이미지로 그리는 것 (특성 맵 : 합성곱 계산을 통해 얻은 출력)
→ 가중치 시각화와 함께 비교하여 각 필터가 이미지의 어느 부분을 활성화시키는지 확인
③ 함수형 API : 케라스에서 신경망 모델을 만드는 방법 중 하나
[함수형 API]
from tensorflow import keras
model = keras.models.load_model('best-cnn-model.h5')
print(model.input)
conv_acti = keras.Model(model.input, model.layers[0].output)
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
plt.imshow(train_input[0], cmap='gray_r')
plt.show()
inputs = train_input[0:1].reshape(-1, 28, 28, 1)/255.0
feature_maps = conv_acti.predict(inputs)
# (1, 28, 28, 32)
print(feature_maps.shape)
→ 첫 번째 필터는 수직선을 감지하고, 세 번째 필터는 전체적으로 밝은색이므로 전면이 모두 칠해진 영역을 감지
마지막 필터는 전체적으로 낮은 음수 값입니다. 이 필터와 큰 양수가 곱해지면 더 큰 음수가 되고 배경처럼 0에 가까운
값과 곱해지면 작은 음수가 된다.
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()
→ 64개의 특성 맵을 8개씩 나누어 출력
conv2_acti = keras.Model(model.input, model.layers[2].output)
feature_maps = conv2_acti.predict(train_input[0:1].reshape(-1, 28, 28, 1)/255.0)
print(feature_maps.shape)
# (1,14,14,64)
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()
'Deep Learning > 혼공 머신 러닝 - 딥러닝' 카테고리의 다른 글
[DL] 순환 신경망 / 정의 (0) | 2022.01.04 |
---|---|
[DL] 합성곱 신경망 이용한 Image Classification (0) | 2022.01.04 |
[DL] 합성곱 신경망 / 정의 (0) | 2022.01.04 |
[DL] 신경망 모델 훈련 (0) | 2022.01.04 |
[DL] 심층 신경망 (0) | 2022.01.04 |