2021. 7. 8. 01:00ㆍICT 멘토링/혼자 공부하는 머신러닝+딥러닝
22강 - 합성곱 신경망의 시각화

가중치 시각화

합성곱 신경망 시각적으로 보기 좋음.
입력에 작은 필터(가중치)를 곱해서 출력 특성 맵을 만듦.
가중치가 높은 부분과 곱해지면 높은 출력 값 가짐.
가중치가 낮은 부분과 곱해지면 낮은 출력 값 가짐.
층의 가중치 분포
model.layers
#//[<tensorflow.python.keras.layers.convolutional.Conv2D at 0x7fc6e69348d0>,
#// <tensorflow.python.keras.layers.pooling.MaxPooling2D at 0x7fc6e60b5860>,
#// <tensorflow.python.keras.layers.convolutional.Conv2D at 0x7fc6acc80ac8>,
#// <tensorflow.python.keras.layers.pooling.MaxPooling2D at 0x7fc6e60b6978>,
#// <tensorflow.python.keras.layers.core.Flatten at 0x7fc6a034f0f0>,
#// <tensorflow.python.keras.layers.core.Dense at 0x7fc6a034f898>,
#// <tensorflow.python.keras.layers.core.Dropout at 0x7fc6a034f0b8>,
#// <tensorflow.python.keras.layers.core.Dense at 0x7fc6a0352f28>]
conv = model.layers[0]
print(conv.weights[0].shape, conv.weights[1].shape)
#//(3, 3, 1, 32) (32,)
필터의 가중치와 절편.
conv_weights = conv.weights[0].numpy()
plt.hist(conv_weights.reshape(-1, 1))
plt.xlabel('weight')
plt.ylabel('count')
plt.show()
가중치 그래프로 출력

대부분 0에 많이 들어 있음.
양수 음수 값 존재.
0에 가까운 것은 의미 있는 것을 학습하는 가중치는 아님.
양수와 음수로 퍼져 있는 것은 어떤 특성을 방지하기 위해 학습한 것.

층만 만들어서 가중치를 시각화하면 균등분포를 이룸.
가중치는 0으로 초기화하면 안 되므로 0은 아닌 작은 실수값을 가지게 함.
균등분포가 훈련 후에는 위의 그래프처럼 변화함.
층의 가중치 시각화
fig, axs = plt.subplots(2, 16, figsize=(15,2))
for i in range(2):
for j in range(16):
axs[i, j].imshow(no_training_weights[:,:,0,i*16 + j], vmin=-0.5, vmax=0.5)
axs[i, j].axis('off')
plt.show()
3*3*1 32개
imshow - 임의로 출력. 배열 값을 최소값을 가장 어둡게 최대값을 가장 밝게 표현.
최대값이 0.1 이든 1이든 가장 밝은 노란색으로 표시됨.
동일한 기준을 가지도록 vmin, vmax 지정.


함수형 API

함수처럼 호출할 수 있음.

InputLayer - 케라스에선 지정 필요, sequential 클래스에선 자동으로 만들어줌. 함수형 API에서는 명시적 지정 필요.
모델 객체의 층

첫 번째 특성 맵 시각화
conv_acti = keras.Model(model.input, model.layers[0].output)
inputs = train_input[0:1].reshape(-1, 28, 28, 1)/255.0
feature_maps = conv_acti.predict(inputs)
print(feature_maps.shape)
#//(1, 28, 28, 32)

두 번째 특성 맵 시각화
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)

낮은 층에서 저수준 특성 학습.
단순 모양, 패턴, 색깔
높은 층에서 고수준 특성 학습.
10 클래스의 추상적인 개념.
층이 깊어질수록 난해하고 이해하기 어려움.
참고자료
https://www.youtube.com/watch?v=_lDVf8jDKHg&list=PLVsNizTWUw7HpqmdphX9hgyWl15nobgQX&index=22
'ICT 멘토링 > 혼자 공부하는 머신러닝+딥러닝' 카테고리의 다른 글
24강 - 순환 신경망으로 IMDB 리뷰 분류하기 (0) | 2021.07.08 |
---|---|
23강 - 순차 데이터와 순환 신경망 (0) | 2021.07.08 |
21강 - 합성곱 신경망을 사용한 이미지 분류 (0) | 2021.07.08 |
20강 - 합성곱 신경망의 개념과 동작 원리 배우기 (0) | 2021.07.08 |
19강 - 신경망 모델 훈련 ▶️인경 신경망 모델 훈련의 모범 사례 학습하기 (0) | 2021.07.08 |