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)
上一篇 2022年6月16日 下午10:16
下一篇 2022年6月16日 下午10:16


相关推荐

  • idea 2021.5.5激活码【在线注册码/序列号/破解码】

    idea 2021.5.5激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    72
  • html css js 注释符号,js 注释怎么写 javascript注释格式|js注释

    html css js 注释符号,js 注释怎么写 javascript注释格式|js注释javascript 注释源码中被 JavaScript 引擎忽略的部分就叫做注释 它的作用是对代码进行解释 即可提高代码的可读性 也可以防止新老同事由于时间间隔很久 看旧代码时业务逻辑难以理解 Javascript 提供两种注释的写法 一种是单行注释 用 起头 另一种是多行注释 放在 和 之间 这是单行注释 这是多行注释 此外 由于历史上 JavaScript 可以兼容 HTML

    2026年3月20日
    2
  • Java Manifest

    Java ManifestJavaManifest直接使用Javaclass文件来运行程序,但一般发布和运行JAR(JavaArchive)文件,JAR文件是class文件的ZIP压缩存档。Manifest描述了Jar文件的打包、运行信息。JDK提供了用于处理Manifest信息的API,详细的信息请见java.util.jar包,通过给JarFile传递jar文件的路径,然后调用JarFile的

    2025年6月15日
    9
  • JAVA ListNode链表

    JAVA ListNode链表链表结构 在 Java 中用需要自己定义一个 ListNode 类来生成链表对象 自定义的 ListNode 链表类如下 publicclassL intval ListNodenext 下一个链表对象 ListNode intx val x 赋值链表的值 leetcode 第 2 题

    2026年3月18日
    2
  • linux下搭建SVN服务器

    linux下搭建SVN服务器————以下内容为转载———————https://blog.csdn.net/wuruijie321/article/details/83652705Linux下的SVN服务器搭建鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,…

    2022年7月19日
    18
  • java实现完全跨域SSO单点登录

    java实现完全跨域SSO单点登录java 实现 SSO 什么是 SSOSSO SingleSignOn 单点登录是实现多个系统之间统一登录的验证系统 简单来说就是 有 A B C 三个系统 在 A 处登录过后 再访问 B 系统 B 系统就已经处于了登录状态 C 系统也是一样 举个生活中栗子 你同时打开天猫和淘宝 都进入 login 界面 都要求你登录的 现在你在淘宝处登录后 直接在天猫处刷新 你会发现 你已经登录了 而且就是你在淘宝上登录的用户

    2026年3月19日
    2

发表回复

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

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