[英]How to visualize RNN/LSTM weights in Keras/TensorFlow?
我遇到過研究出版物和問答討論檢查 RNN 權重的必要性; 一些相關的答案是在正確的方向,建議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 個單位,權重batch_shape = (16, 100, 16)
(輸入)
rnn_histogram(model, 'bidir', equate_axes=2)
rnn_heatmap(model, 'bidir', norm=(-.8, .8))
CuDNNLSTM
(和CuDNNGRU
)偏差的定義和初始化方式不同——這是無法從直方圖中推斷出來的 EX 3:uni-CuDNNGRU,64 個單位,權重梯度batch_shape = (16, 100, 16)
(輸入)
rnn_heatmap(model, 'gru', mode='grads', input_data=x, labels=y, cmap=None, absolute_value=True)
absolute_value=True
和灰度顏色圖來完成New
是最活躍的內核門(輸入到隱藏),建議對允許信息流進行更多的糾錯Reset
是最不活躍的循環門(隱藏到隱藏),表明對記憶保持的糾錯最少獎勵 EX:LSTM NaN 檢測,512 個單位,權重batch_shape = (16, 100, 16)
(輸入)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.