LSTM和双向LSTM

LSTM和双向LSTM文章目录1.RNN2.LSTM2.1简介2.2细胞状态2.3遗忘门2.4输入门2.5输出门3.双向LSTM(Bi-directionalLSTM)4.keras实现4.1LSTM模型4.2Bi-LSTM模型4.3训练模型4.4预测参考连接:https://www.cnblogs.com/Allen-rg/p/11712703.html1.RNN循环神经网络(RecurrentNeuralNetwork,RNN)是一种处理序列数据的网络。其中xt为t时刻的输入,h

大家好,又见面了,我是你们的朋友全栈君。

参考连接:https://www.cnblogs.com/Allen-rg/p/11712703.html

1. RNN

循环神经网络(Recurrent Neural Network,RNN)是一种处理序列数据的网络。
在这里插入图片描述
其中xt为t时刻的输入,ht为t时刻输出,ht-1是上一时刻的的输出序列。t时刻的输出ht与t-1时刻的记忆内容(输出)以及t时刻的输入xt有关。
RNN时一种具有重复结构的网络:tanh层
在这里插入图片描述

存在问题:RNN只具有短期的记忆能力。当传输的时间过长时,如t与0相隔很大,则会使得ht已经丧失0时刻x0的信息。主要原因是随着时间间隔的增大,R存在梯度消失使得RNN丧失向远处连接的能力。
**为什么引入LSTM?**因为RNN只具有短期记忆能力,当时间序列过长时,导致信息无法有效传播到远处。因此提出具有短期记忆和长期记忆能力的LSTM避免长期依赖的问题。

2. LSTM

长短期记忆网络(Long Short-Term Memory, LSTM)是一种具有短期和长期记忆能力的网络,用于减轻RNN因为梯度消失只有短期记忆的问题。

2.1 简介

如下图所示,为LSTM重复组件。
LSTM基本结构
LSTM的组成部分包括:细胞状态、遗忘门、输入门和输出门四个部分。其中细胞状态用于保存t时刻的重要信息,三个门来控制细胞状态的存储信息。从而保证消息的有效传递。

2.2 细胞状态

用于保存每一时刻的重要信息。在这里插入图片描述
如上图最上方的横线一直贯穿整个网络,产生每一时刻需要保存的重要信息。重要信息由前一时刻中有用的信息、前一时刻输出信息和当前输入的有用信息共同产生,再传递给下一个时刻,由下一时刻的遗忘门进一步选择需要的信息。

2.3 遗忘门

控制上一层细胞状态Ct-1中需要遗忘的信息。
遗忘门
其中 f t f_t ft是用于产生控制上一层细胞状态需要遗忘的变量,使用sigmoid激活函数使值在(0,1)之间,从而确定 C t − 1 C_{t-1} Ct1中需要完全遗忘和记住的上一层输出和本时刻输入的内容。

2.4 输入门

处理当前序列位置的输入,确定需要更新的信息更新细胞状态。包含两个部分:一个部分使用sigmoid函数确定输入中的哪些新信息被加入细胞状态;确定了保留的输入新信息后,使用tanh产生新的候选向量,然后将需要保留的信息输入到细胞状态中。
在这里插入图片描述
更新细胞状态:当确定了遗忘门和输入门的输出后,便可以将 C t − 1 C_{t-1} Ct1更新细胞状态为 C t C_t Ct。其中 f t × C t − 1 f_t\times C_{t-1} ft×Ct1表示需要保留的信息, i t × C t i_t\times C_t it×Ct表示想要新增的信息,两者之和为本序列的细胞状态。
在这里插入图片描述

2.5 输出门

最终需要根据细胞状态的内容选择性输出的细胞状态的内容。首先需要使用sigmoid函数来确定哪个部分的内容需要输出,再使用tanh对细胞状态进行处理,再将两部分相乘即可得到希望输出的部分。
在这里插入图片描述

3. 双向LSTM(Bi-directional LSTM)

有时候希望预测的输出由前面的输入和后面的输入共同决定,从而提高准确度。Forward层和Backward层共同连接到输出层。
在这里插入图片描述
Forward层从1到t时刻正向计算,得到并保存每个时刻的隐藏层的输出向后传播;Backward层从t时刻向1反向传播,得到并保存每个时刻向后隐藏层的输出。最后每个时刻结合Farward和Backward层的相应输出的结果通过激活函数得到最终的结果。

在这里插入图片描述

4. keras 实现

4.1 LSTM模型

model = Sequential()
model.add(Embedding(3800, 32, input_length=380))
model.add(Dropout(0.2))
model.add(LSTM(32))
model.add(Dense(256, activation='relu))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid))

4.2 Bi-LSTM模型

model = Sequential()
model.add(Embedding(3800, 32, input_length=3800))
model.add(Dropout(0.5))
model.add(Bidirectional(LSTM(32, return_sequences=True), merge_mode='concat'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

4.3 训练模型

es = EarlyStopping(monitor='val_acc', patence=5)
model.compile(loss='binary_crossentropy',optimizer='adam', metrics=['accuracy'])
batchsize = 64
epoches = 20
model.fit(x_train,y_train,
validation_split=0.1,
batch_size=batch_size,
epochs=epochs,
callbacks=[es],
shuffle=True)

4.4 预测

scores = model.evaluate(x_test, y_test)
print('LSTM:test_loss:%f, accuracy:%f' %(scores[0], scores[1]))
print('Bi-LSTM:test_loss:%f, accuracy:%f' %(scores[0], scores[1]))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149400.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows server2012密钥_windows 7密钥

    Windows server2012密钥_windows 7密钥WindowsServer2012Standard密钥:NB4WH-BBBYV-3MPPC-9RCMV-46XCBWindowsServer2012StandardCore密钥:NB4WH-BBBYV-3MPPC-9RCMV-46XCBWindowsServer2012Datacenter密钥:BH9T4-4N7CW-67J3M-64J36-WW98YWindowsS

    2022年10月10日
    2
  • Android反编译apk逆向分析

    Android反编译apk逆向分析

    2021年9月30日
    55
  • 我的ubuntu6.10 源(source.list)

    我的ubuntu6.10 源(source.list)

    2021年4月28日
    119
  • nmap命令的使用「建议收藏」

    nmap命令的使用「建议收藏」介绍portScan的方法介绍portScan就是一种通过检测对方服务器的开放端口,侦测对方服务器服务的方法。一般可分为主动式和被动式两种。主动式就是通过向对方服务器的特定端口发送数据包,根据应答来判断。以nmap为代表被动式,不主动发出数据包,而是在网络上长时侦听,分析网上的transaction,来分析,严格的来被动式不应该被称作是端口扫描。以nwatch为代表优缺点比较主动…

    2022年5月9日
    103
  • Django(23)Django限制请求装饰器

    Django(23)Django限制请求装饰器前言有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器限制请求装饰器Django内

    2022年7月30日
    10
  • SSM整合案例(超详细)「建议收藏」

    SSM整合案例(超详细)「建议收藏」SSM整合案例(超详细)环境准备前提须知创建数据库和表结构创建Maven工程ssm导入坐标并建立依赖编写实体类编写持久层接口编写业务层接口编写业务层实现类编写Controller整合步骤保证Spring框架在web工程中独立运行第一步:编写spring配置文件并导入约束第二步:使用注解配置业务层第三步:导入log4j.properties配置文件第四步:测试spring能否独立运行保证SpringMVC在web工程中独立运行第一步:在web.xml中配置核心控制器(Dis

    2022年4月28日
    103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号