RNN 가중치 검사의 필요성을 논의하는 연구 간행물과 Q & A를 접했습니다. 일부 관련 답변은 올바른 방향으로 나와 있습니다. get_weights()
그러나 실제로 가중치를 의미있게 시각화하는 방법은 무엇입니까? 즉, LSTM 및 GRU에는 게이트 가 있고 모든 RNN에는 독립적 인 기능 추출기 역할을하는 채널 이 있습니다. 그렇다면 (1) 게이트 별 가중치를 가져오고 (2) 정보를 제공하는 방식으로 플로팅하는 방법은 무엇입니까?
소스 코드에서 검사 또는 비아 수 Keras / 잘 정의 된 순서 TF 빌드 RNN 가중치, layer.__dict__
직접 - 다음 페치하는 데 사용되는 커널 당 및 당 게이트 가중치; 그런 다음 텐서의 모양이 주어지면 채널당 처리를 사용할 수 있습니다. 아래 코드 및 설명 은 Keras / TF RNN의 가능한 모든 경우 를 다루며 향후 API 변경 사항으로 쉽게 확장 할 수 있어야합니다.
RNN 그래디언트 시각화 및 RNN 정규화에 대한 응용 프로그램도 참조하십시오 . 이전 게시물과 달리 여기에 단순화 된 변형을 포함하지 않을 것입니다. 무게 추출 및 구성의 특성에 따라 여전히 다소 크고 복잡하기 때문입니다. 대신 저장소에서 관련 소스 코드를보기 만하면됩니다 (다음 섹션 참조).
코드 소스 : RNN (이 게시물에는 더 큰 이미지 포함), 내 저장소 참조; 다음이 포함됩니다.
from keras
&from tf.keras
시각화 방법 :
EX 1 : uni-LSTM, 256 개 단위, 무게 - batch_shape = (16, 100, 20)
(입력)
rnn_histogram(model, 'lstm', equate_axes=False, show_bias=False)
rnn_histogram(model, 'lstm', equate_axes=True, show_bias=False)
rnn_heatmap(model, 'lstm')
equate_axes=True
는 커널과 게이트를 균등하게 비교하여 비교 품질을 개선하지만 잠재적으로 시각적 매력을 저하시킵니다.EX 2: bi-CuDNNLSTM, 256 units, weights -- batch_shape = (16, 100, 16)
(input)
rnn_histogram(model, 'bidir', equate_axes=2)
rnn_heatmap(model, 'bidir', norm=(-.8, .8))
CuDNNLSTM
(and CuDNNGRU
) biases are defined and initialized differently - something that can't be inferred from histogramsEX 3: uni-CuDNNGRU, 64 units, weights gradients -- batch_shape = (16, 100, 16)
(input)
rnn_heatmap(model, 'gru', mode='grads', input_data=x, labels=y, cmap=None, absolute_value=True)
absolute_value=True
and a greyscale colormapNew
is the most active kernel gate (input-to-hidden), suggesting more error correction on permitting information flowReset
is the least active recurrent gate (hidden-to-hidden), suggesting least error correction on memory-keepingBONUS EX: LSTM NaN detection, 512 units, weights -- batch_shape = (16, 100, 16)
(input)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다