gpt4 book ai didi

python - 如何在Keras/TensorFlow中可视化RNN/LSTM权重?

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:43 25 4
gpt4 key购买 nike

我遇到过研究出版物和Q&A在讨论检查RNN权重的需求。一些相关的答案朝着正确的方向提出,建议使用get_weights()-但是我如何真正有意义地可视化权重?也就是说,LSTM和GRU都有门,所有RNN都有充当独立特征提取器的通道-那么我如何(1)获取每个门的权重,以及(2)以信息方式绘制它们?

最佳答案

Keras / TF以明确定义的顺序构建RNN权重,可以从源代码中或直接通过layer.__dict__进行检查-然后用于获取每个内核和每个门的权重;给定张量的形状,则可以采用每通道处理。以下代码和说明涵盖了Keras / TF RNN的所有可能情况,并且应该可以轻松扩展为将来的任何API更改。

另请参见可视化RNN渐变以及RNN regularization的应用;与前一篇文章不同,我不会在此处包括一个简化的变体,因为根据重量提取和组织的性质,它仍然相当大而复杂;相反,您只需在存储库中查看相关的源代码即可(请参阅下一节)。



代码源:See 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中(通常),偏置门都初始化为零,而“忘记偏置”则初始化为零。










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)偏差的定义和初始化方式不同-无法从直方图推断出


enter image description here
enter image description here



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是最不活跃的循环门(隐藏到隐藏),建议在内存保留方面进行最少的纠错







BONUS EX:LSTM NaN检测,512单位,重量-batch_shape = (16, 100, 16)(输入)


热图和直方图都带有内置的NaN检测-内核,门和方向
热图将打印NaN到控制台,而直方图将直接在绘图上标记它们
两者都将在绘制之前将NaN值设置为零;在下面的示例中,所有相关的非NaN权重已经为零

关于python - 如何在Keras/TensorFlow中可视化RNN/LSTM权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59275959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com