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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Invalidate介绍[通俗易懂]

    Invalidate介绍[通俗易懂]1、Invalidate介绍  voidInvalidate(BOOLbErase=TRUE);  该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际

    2025年5月23日
    5
  • git 重置用户名 密码信息

    gitclone时,权限不够。如fatal:unabletoaccess:TherequestedURLreturnederror:403可能原因是,你之前在本电脑使用过git.但是以前和现在又不是同一个账户。所以当你现在使用gitcloneurl时,默认使用以前的账户信息。所以出现没有权限的状况。解决方法:重置本机保留的gitconfig信息。…

    2022年4月8日
    243
  • 记忆化搜索算法

    记忆化搜索算法概述记忆化搜索算法事实上是一种对递归算法的优化因为在递归算法中有很多重复计算,导致了非常离谱的时间和空间复杂度所以我们采用记住计算结果的方式,能很大程度上减少复杂度例题1AcWing901.滑雪例题2AcWing2067.走方格…

    2022年7月26日
    17
  • IntelliJ IDEA 整理代码格式 快捷键[通俗易懂]

    IntelliJ IDEA 整理代码格式 快捷键[通俗易懂]一、前言在开发的过程中,项目代码格式尤为重要,但是有些开发人员经常会不注意细节,导致代码阅读性很差,如下图所示:二、解决方案打开IDEA,按Ctrl+Alt+L键,进行整理代码格式,可以看到代码已经进行整理PS:如果和qq热键冲突的话,需要先将qq的热键Ctrl+Alt+L设置为无,如下图所示:…

    2022年10月12日
    4
  • Lucene源码解析–TokenStream和AttributeSource

    Lucene源码解析–TokenStream和AttributeSource转 http://blog.itpub.net/28624388/viewspace-765691/一:Lucene的概况<style./*Style.Definitions*/table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;…

    2022年7月22日
    10
  • 最新VS2012激活成功教程 序列号,vs2012旗舰版密钥序列号【收藏】「建议收藏」

    最新VS2012激活成功教程 序列号,vs2012旗舰版密钥序列号【收藏】「建议收藏」对于开发者而言,一款优秀智能的开发工具能够提升应用开发的效率,正因为如此,VisualStudio作为主流的开发工具,微软非常的用心,不仅能够让这款开发工具满足用户体验的需要,同时能够支持更多的新技术架构,并且,VS2012更加适合用于开发Windows8专用程序。网上好多无效的,为了收藏,先保存一份。一、VS2012下载地址。中文版:http://download….

    2022年7月20日
    26

发表回复

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

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