lstm需要优化的参数_LSTM的物理结构和一些细节

海晨威:一幅图真正理解LSTM的物理结构​zhuanlan.zhihu.com
cef3c2d317fa6ef7afd7caa370d8e670.png

a08002650f6cdc4cafb170ece8eda18e.png

这个是网上看的最多的图了,但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。

6d696c9fafe89e3bfe0c87f79f2aa4dc.png

展开之后实际的物理结构是这样的,1、2图同颜色的点代表了同一个东西;

问题1:

6ecd4bcc50946a0e46336a1f0f699c11.png

这里的输入xt和ht是怎么结合的?比如:

cadc6330049edc4d6d1083036777bd21.png

这块儿很多地方都没讲清楚,实际上就是concat,直接concat起来了:

175b346680575ee688f2995ff6333230.png

问题2:LSTM的权重到底是啥样的?

这里直接以tf.keras的代码为例子看看就造了:

def build_model(look_back: int, batch_size: int=1) -> Sequential:model = Sequential()model.add(LSTM(units=128,activation='relu',batch_input_shape=(batch_size, look_back, 1),stateful=True,return_sequences=False))model.add(Dense(1, activation='linear'))model.compile(loss='mean_squared_error', optimizer='adam')return model
model = build_model(28, batch_size=1)

首先,当我们的units=128的时候,LSTM的最终输出(仅考虑最后一个时间步输出,并且不考虑sequence的输出)就是128维的向量定下来了,对应的输出就是:

1473fbd15c8d2e32807236f8e2dd6cf1.png

这里的最后一个ht的部分,注意这个ht既可以作为最终的输出,也是时间中的hidden state输入到下一个时间点的前向传播中去。

model.layers[0].trainable_variables

d85e0b2024ef7bbe9186f1dfb23fda71.png

Param <tf.Variable 'lstm_4/lstm_cell_4/recurrent_kernel:0' shape=(128, 512) dtype=float32, numpy=
array([[ 3.0333996e-03, 1.4155725e-02, -3.9381277e-02, ...,
4.0887762e-02, -3.1605218e-02, -1.7439183e-02],
[-5.2204579e-02, 1.6296864e-02, 4.4382092e-02, ...,
2.1501739e-02, 5.1224865e-02, -5.1180001e-02],
[ 1.9754471e-02, -2.7741276e-02, -3.0992866e-02, ...,
1.8080823e-02, -2.1589132e-02, 8.2989247e-04],
...,
[-2.9214425e-05, -2.5351198e-02, -4.1916996e-02, ...,
-5.0040476e-02, -1.1436570e-02, 4.7302879e-02],
[-4.4846401e-02, 3.3629253e-03, 1.7752033e-02, ...,
-4.5454025e-02, -8.5912934e-03, -1.8942051e-02],
[-1.8914735e-02, -4.9705409e-02, -5.3823508e-02, ...,
3.6144644e-02, -2.1415317e-02, 1.5490238e-02]], dtype=float32)>:

(截图不知道怎么搞的一直上传失败)

f3f09f1a91db0995acb5992f1aeb7c74.png

可以看到,LSTM层一共有3组参数,第一组是512个参数,我们的LSTM的units设置为128,因此

3190e12119f3fa811c3f40b9db6beb5a.png

ee2aa5888d85b623a78929b05e438f9b.png

这里的四个门,每一个门对应一个dense层,将input映射为128维,4个门一共4*128=512个参数,对应的就是第1组权重,注意,这里我们的输入的维度是1,因为就是简单的序列数据,没有其它的,所以这里第一个矩阵权重为(1,512),如果是embedding的话,比如embedding的维度是100,那么就是(100,512),tensorflow.keras这里把多个门的权重合并到一起来了。。。看了半天才看明白,其实严格一点应该是 4个 1*128的小矩阵,估计是为了工程上的便利和优化直接合并到一起了;

那么第三组的权重也很好理解,就是bias,

f3f09f1a91db0995acb5992f1aeb7c74.png

512个bias分别分配到这4个门的计算中;

最后是第二组权重,实际上就是

上一个时间步的ht-1到4个门的映射

6d696c9fafe89e3bfe0c87f79f2aa4dc.png

我们前面说过上一个时间步的ht-1和这个时刻的输入xt是concat的,所以应该是(128+1)*128*4 这样比较好理解,不过tf.keras的权重不是按照这样保存的就是了,所以看代码的时候会有一点疑惑,不过总算看明白了shift~

问题3 LSTM的两个dropout是drop啥?

LSTM中有两个dropout的参数:

一个是

| dropout: Float between 0 and 1. Fraction of the units to drop for the linear
| transformation of the inputs. Default: 0.

这个dropout实际上就是输入X的dropout,

dc7ffa295e626103ce6a83be0ea9d5f1.png

04d428f79ffdc2270bf3df24e4168312.png

也就是这个部分做dropout

一个是

| recurrent_dropout: Float between 0 and 1. Fraction of the units to drop for
| the linear transformation of the recurrent state. Default: 0.

686a3a369dda73b0f417ea025b26ec94.png

是针对于这个部分做dropout,

常规的dropout层是对LSTM最终的输出进行dropout。

问题四 :stateful LSTM 和 stateless LSTM有啥区别?

首先我们需要知道的是,我们平常大部分时候使用的LSTM都是属于stateless LSTM。

6ecd4bcc50946a0e46336a1f0f699c11.png

举个例子,比如情感分析:

“我 喜欢 你”当我们把这个句子的每个词embedding之后进入上面的这个LSTM的结构,到最终的时间步后,输出结束,此时,ht作为输出接一个分类层完成任务。

这个时候,tf.keras中的LSTM默认会reset_state,也就是

ecb802c7bdcda8b69f467ae2aeec9679.png

cell state和 hidden state都没有消失了。然后进入下一个句子的前向传播;

stateful LSTM则可以将当前句子的最终的cell state和hidden state的输出作为下个句子的初始的cell state和hidden state。

stateful LSTM:能让模型学习到你输入的samples之间的时序特征,适合一些长序列的预测,哪个sample在前,那个sample在后对模型是有影响的。
stateless LSTM:输入samples后,默认就会shuffle,可以说是每个sample独立,之间无前后关系,适合输入一些没有关系的样本。详细可见:
尤鱼哥:Keras之stateful LSTM全面解析+实例测试​zhuanlan.zhihu.com
757da6a1b25b16a9b7719d8560f2a4ce.png

很好理解了。

我们在做时间序列预测的时候可以同时考虑stateful LSTM和stateness LSTM看看哪个效果好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OLED中的Demura

OLED作为一种电流型发光器件已越来越多地被应用于高性能显示中。由于它自发光的特性&#xff0c;与LCD相比&#xff0c;AMOLED具有高对比度、超轻薄、可弯曲等诸多优点。但是&#xff0c;亮度均匀性和残像仍然是它目前面临的两个主要难题&#xff0c;要解决这两个问题&#xff…

python的编程模式有哪两种_python程序的两种运行方式是什么

python程序的两种运行方式是什么 第一种方式&#xff1a;REPL 所谓REPL即read、eva、print、loop&#xff08;读取、计算、打印、循环&#xff09;&#xff0c;实现REPL运行方式有以下两种&#xff1a; 1、IDLE&#xff08; 集成开发环境或集成开发和学习环境&#xff09;是Pyt…

对Linux命令od -tc -tx1的C语言程序实现myod-优化版

导语 自编od C语言实现版名为myod上个星期有一个初代版&#xff0c;链接- myod原版这星期的课上要求实现myod-系统调用版本&#xff0c;要求如下 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能&#xff0c;注意XXX是文件…

python字典求平均值_Python 3.4 – 如何获得字典值的平均值?

好吧,让我们迭代所有字典键并平均项目&#xff1a; avgDict {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] sum(v)/ float(len(v)) 现在你可以看到&#xff1a; avgDict Out[5]: {Ivan: 3.106666666666667, Martin: 4.81666…

PHP使用指南,PHP使用指南-cookies部分

php使用指南-cookies部分在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。什么是cookies及作用&#xff1f;cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中&#xff0c;由服务器端指定&#xf…

python猜数字游戏猜n次_python实践项目四:猜数字游戏

1 #!/usr/bin/python 2 #-*- coding: UTF-8 -*- 3 4 importrandom5 secretNumberrandom.randint(1,20)6 print "Im thinking of a number between 1 and 20." 7 times 08 for i in range(1,7):9 print "Take a guess:" 10 guessint(input())11 if guess

使用Linux记录

更新时间: 2018-12-12 Linux Usage 缘起&#xff1a;最近将系统更换为Linux&#xff0c;虽然之前有用过&#xff0c;但只是当作尝试&#xff0c;未当为主系统&#xff0c;这次下定决心以它为主系统&#xff0c;懒得去纠结使用win的一种不道德感及不爽感&#xff0c;游戏及娱乐与…

使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳

我使用openssl从rfc 3161 timestampreq生成了一个rfc3161 timestampresp。因此,我使用了自签名CA证书和自签名CA使用以下命令颁发的TSA证书:openssl ts -reply -queryfile request.tsq -signer TSAcert.pem -out response.tsr已创建响应。openssl ts -reply -text -in response…

halcon 旋转_Halcon视觉软件应该如何系统学习?

End 声明&#xff1a;部分内容来源于网络&#xff0c;仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥&#xff0c;请联系删除。

java使用重复的类库,java list 去除 重复值

一&#xff1a;Hastset根据hashcode判断是否重复&#xff0c;数据不会重复Java代码/** List order not maintained **/public static void removeDuplicate(ArrayList arlList){HashSet h new HashSet(arlList);arlList.clear();arlList.addAll(h);}二&#xff1a;通过Hashset…

JavaScript--关于变量提升思考

下面例子仅仅是思考变量提升使用&#xff1a; 在实际开发中并不推荐使用相同名字的变量和函数&#xff01; 1 // 如果变量和函数同名的话&#xff0c;函数优先提升 2 console.log(a); 3 function a() { 4 console.log(aaaaa); 5 } 6 var a 1; 7 console.log(a); 更多简单经典…

C++求复数的角度_【研读.教材分析】“勾股定理”教学——基于单元整体的角度再思考...

(西安市第八十六中学 刘丽丽)学科教学要注重知识的“生长点”和“延伸点”&#xff0c;把课时知识置于学科整体逻辑体系中&#xff0c;关注结构和通法&#xff0c;处理好局部与整体之间的关系。所以在北师大版八年级上册数学第一章《勾股定理》的备课中&#xff0c;我再次以问…

java 十进制 左移,java移位运算符之十进制转二进制

本次MS08-067严重漏洞各系统补丁地址如下&#xff1a;中文操作系统KB958644补丁下载地址&#xff1a;Windows Vista 安全更新程序 (KB958644)Windows Server 2008 x64 Edition 安全更新程序 (KB958644)Windows Server 2003 x64 Edition 安全更新程序 (KB958644)Windows Server …

angualr 单选全选方法(适用购物车/各种列表删除等)

Html部分&#xff1a; <table class"pay_attention_table"><thead><tr><!--ng-click"all(selectAll)"--><th class"c_aa w52"><input type"checkbox" class"mr4" ng-model"selectObj…

vc++64位系统下long的长度为4个字节_Java与系统硬件的亲密接触「伪共享」

作者&#xff1a;码洞来源&#xff1a;https://zhuanlan.zhihu.com/p/32764602在解释【伪共享】这个概念之前&#xff0c;我们先来运行一段代码&#xff0c;小编的电脑上有4个core。这个程序的逻辑是4个线程共享同一个数组读写不同下标的变量。每个线程循环1亿次读写&#xff0…

快捷登录PHP,phpcms 微信快捷登陆

上一篇文章&#xff0c;给大家分享了关于微信授权登陆功能&#xff0c;今天给大家分享一个微信快捷登陆的实际用例。phpcms接入微信快捷登陆第一步&#xff0c;在login方法中&#xff0c;判定是否使用微信浏览器访问&#xff0c;如果是&#xff0c;发起授权申请if ( strpos($_S…

linux 端口号查看

linux 端口号查看netstat -anp |grep 端口号最后一列是端口号转载于:https://www.cnblogs.com/ditmark/p/7669804.html

pwm波如何控制电机代码_PWM波控制720电机

详细方案四&#xff1a;pwm与720电机控制电机硬件分析什么是电机&#xff1f;电机(俗称"马达")是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩&#xff0c;作为用电器或各种机械的动力源。其中本四轴采用的电机是直流电机。直流…

php里的stdclass,PHP中的stdClass是什么?

stdClass是另一个很好的PHP特性。您可以创建一个匿名PHP类。让我们检查一个例子。$pagenew stdClass();$page->nameHome;$page->status1;现在&#xff0c;假设您有另一个类&#xff0c;它将使用页面对象初始化并在其基础上执行。<?phpclass PageShow {public $curre…

arduino使用oled代码_【惊不?】Arduino改造古董卡西欧计算器为作弊神器

一台朴实无华的计算器&#xff0c;卡西欧牌。看起来和千万学子们所使用的计算器一样&#xff0c;没什么特别的&#xff0c;还带着一些陈旧的使用痕迹。但如果你用磁铁碰一下&#xff1a;咦&#xff0c;简直像打开了探险电影里的神秘机关&#xff0c;右上角的太阳能电池板部分居…