Ove*_*gon 3 python visualization keras tensorflow recurrent-neural-network
我遇到过研究出版物和问答讨论检查 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)(输入)

| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |