簡體   English   中英

如何在 Keras/TensorFlow 中可視化 RNN/LSTM 權重?

[英]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 (這篇文章包含更大的圖像),我的存儲庫; 包括:

  • 激活可視化
  • 權重可視化
  • 激活梯度可視化
  • 權重梯度可視化
  • 解釋所有功能的文檔字符串
  • 支持 Eager、Graph、TF1、TF2,以及from kerasfrom tf.keras
  • 比示例中顯示的更具視覺可定制性

可視化方法

  • 2D 熱圖:繪制每個門、每個內核、每個方向的權重分布; 清楚地顯示內核到隱藏的關系
  • 直方圖:繪制每個門、每個內核、每個方向的權重分布; 丟失上下文信息

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用於跨內核和門的均勻比較,提高比較質量,但可能會降低視覺吸引力
  • 最后一張圖是相同權重的熱圖,用垂直線標記門分離,還包括偏置權重
  • 與直方圖不同,熱圖保留了通道/上下文信息:可以清楚地區分輸入到隱藏和隱藏到隱藏的轉換矩陣
  • 請注意忘記門處的最大值的大量集中; 作為瑣事,在 Keras(通常)中,偏置門都初始化為零,除了忘記偏置,它被初始化為 1


EX 2:bi-CuDNNLSTM,256 個單位,權重batch_shape = (16, 100, 16) (輸入)
rnn_histogram(model, 'bidir', equate_axes=2)
rnn_heatmap(model, 'bidir', norm=(-.8, .8))

  • 兩者都支持雙向; 此示例中包含的直方圖偏差
  • 再次注意偏差熱圖; 它們似乎不再與 EX 1 位於同一位置。 事實上, 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) (輸入)

  • 熱圖和直方圖都帶有內置的 NaN 檢測 - 內核、門和方向
  • 熱圖會將 NaN 打印到控制台,而直方圖將直接在繪圖上標記它們
  • 兩者都會在繪圖前將 NaN 值設置為零; 在下面的示例中,所有相關的非 NaN 權重都已經為零

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM