热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

我遇到过许多研究出版物,Q&A讨论了检查RNN权重的必要性;一些相关的答案朝着

我遇到过许多研究出版物,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

  • 比示例中显示的视觉自定义性更高



可视化方法


  • 二维热图:绘制每个门,每个内核,每个方向的重量分布; 清楚地显示了内核与隐藏的关系

  • 直方图:绘制每个门,每个内核,每个方向的权重分布; 丢失上下文信息



EX 1:uni-LSTM,256个单位,重量-batch_shape = (16,100,20)(输入)
rnn_histogram(model,'lstm',equate_axes=False,show_bias=False)
rnn_histogram(model,equate_axes=True,show_bias=False)
rnn_heatmap(model,'lstm')


  • 顶部图是直方图子图网格,显示每个内核以及每个内核中每个门的权重分布

  • 第二个图集equate_axes=True用于在内核和门之间进行均匀比较,提高了比较质量,但可能会降低视觉吸引力

  • 最后一幅图是具有相同权重的热图,其中栅极间隔由垂直线标记,并且还包括偏置权重

  • 与直方图不同,热图保留通道/上下文信息:可以清楚地区分输入到隐藏和隐藏到隐藏的转换矩阵

  • 请注意,在“忘记”门口大量集中了最大值;作为琐事,在Keras(通常是)中,除“忘记”偏置(初始化为1)之外,所有偏置门均初始化为零。


EX 2:bi-CuDNNLSTM,256个单位,重量-batch_shape = (16,16)(输入)
rnn_histogram(model,'bidir',equate_axes=2)
rnn_heatmap(model,norm=(-.8,.8))


    两者均支持双向。此示例中包含的直方图偏差
  • 再次注意偏差热图;它们似乎不再与EX 1中位于相同的位置。确实,CuDNNLSTM(和CuDNNGRU)偏差的定义和初始化方式不同-无法从直方图推断出这一点

enter image description here
enter image description here


EX 3:uni-CuDNNGRU,64个单位,权重梯度-batch_shape = (16,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,16)(输入)


  • 热图和直方图都带有内置的NaN检测-内核,门和方向

  • Heatmap将打印NaN到控制台,而直方图会将其直接标记在图上

  • 两者都将在绘制之前将NaN值设置为零;在下面的示例中,所有相关的非NaN权重已经为零


推荐阅读
  • 基于TensorFlow的Keras高级API实现手写体数字识别
    前言这个项目的话我也是偶然在B站看到一个阿婆主(SvePana)在讲解这个,跟着他的视频敲的代码并学习起来的。并写在自己这里做个笔记也为 ... [详细]
  • 【调参02】如何使用L1和L2正则化降低过拟合风险
    本文介绍了为什么要使用正则化以及如何在Keras中使用正则化来降低模型过拟合风险。文章目录1.权重过大导致的问题2.正则化3.正则化使用技巧3.1在所有模型上使用3.2标准化输入数 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
  • 代码如下:#coding:utf-8importstring,os,sysimportnumpyasnpimportmatplotlib.py ... [详细]
  • 2018年GitHub上最流行50大Python开源项目(上),Go语言社区,Golang程序员人脉社 ... [详细]
  • Yarn已过时!Kubeflow实现机器学习调度平台才是未来
    来源:AI前线本文约6700字,建议阅读10分钟。本文分析了建设分布式训练平台的过程中的痛点所在,为你介绍Kubeflow与其核心组件及其 ... [详细]
  • 强化学习之ActorCritic
    强化学习 ... [详细]
  • 注意力汇聚:NadarayaWatson 核回归
    Nadaraya-Watson核回归是具有注意力机制的机器学习范例。Nadaraya-Watson核回归的注意力汇聚是对训练数据中输出的加权平均。从注意力的角度来看, ... [详细]
author-avatar
你问什么只为她停留_538
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有