双向 LSTM

双向 LSTM本文结构:为什么用双向LSTM什么是双向LSTM例子为什么用双向LSTM?单向的RNN,是根据前面的信息推出后面的,但有时候只看前面的词是不够的,例如,我今天不舒服,我打算__一天。只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。什么是双向L

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

本文结构:

  • 为什么用双向 LSTM
  • 什么是双向 LSTM
  • 例子

为什么用双向 LSTM?

单向的 RNN,是根据前面的信息推出后面的,但有时候只看前面的词是不够的,
例如,

我今天不舒服,我打算__一天。

只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。


什么是双向 LSTM?

双向卷积神经网络的隐藏层要保存两个值, A 参与正向计算, A’ 参与反向计算。
最终的输出值 y 取决于 A 和 A’:

双向 LSTM

即正向计算时,隐藏层的 s_t 与 s_t-1 有关;反向计算时,隐藏层的 s_t 与 s_t+1 有关:

双向 LSTM

双向 LSTM

在某些任务中,双向的 lstm 要比单向的 lstm 的表现要好:

双向 LSTM


例子

下面是一个 keras 实现的 双向LSTM 应用的小例子,任务是对序列进行分类,
例如如下 10 个随机数:

0.63144003 0.29414551 0.91587952 0.95189228 0.32195638 0.60742236 0.83895793 0.18023048 0.84762691 0.29165514

累加值超过设定好的阈值时可标记为 1,否则为 0,例如阈值为 2.5,则上述输入的结果为:

0 0 0 1 1 1 1 1 1 1

和单向 LSTM 的区别是用到 Bidirectional:
model.add(Bidirectional(LSTM(20, return_sequences=True), input_shape=(n_timesteps, 1)))

from random import random
from numpy import array
from numpy import cumsum
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import TimeDistributed
from keras.layers import Bidirectional

# create a sequence classification instance
def get_sequence(n_timesteps):
    # create a sequence of random numbers in [0,1]
    X = array([random() for _ in range(n_timesteps)])
    # calculate cut-off value to change class values
    limit = n_timesteps/4.0
    # determine the class outcome for each item in cumulative sequence
    y = array([0 if x < limit else 1 for x in cumsum(X)])
    # reshape input and output data to be suitable for LSTMs
    X = X.reshape(1, n_timesteps, 1)
    y = y.reshape(1, n_timesteps, 1)
    return X, y

# define problem properties
n_timesteps = 10

# define LSTM
model = Sequential()
model.add(Bidirectional(LSTM(20, return_sequences=True), input_shape=(n_timesteps, 1)))
model.add(TimeDistributed(Dense(1, activation='sigmoid')))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])

# train LSTM
for epoch in range(1000):
    # generate new random sequence
    X,y = get_sequence(n_timesteps)
    # fit model for one epoch on this sequence
    model.fit(X, y, epochs=1, batch_size=1, verbose=2)

# evaluate LSTM
X,y = get_sequence(n_timesteps)
yhat = model.predict_classes(X, verbose=0)
for i in range(n_timesteps):
    print('Expected:', y[0, i], 'Predicted', yhat[0, i])

学习资料:
https://zybuluo.com/hanbingtao/note/541458
https://maxwell.ict.griffith.edu.au/spl/publications/papers/ieeesp97_schuster.pdf
http://machinelearningmastery.com/develop-bidirectional-lstm-sequence-classification-python-keras/


推荐阅读
历史技术博文链接汇总
也许可以找到你想要的:
[入门问题][TensorFlow][深度学习][强化学习][神经网络][机器学习][自然语言处理][聊天机器人]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 简述python变量的命名规则_Python 变量命名规则

    简述python变量的命名规则_Python 变量命名规则Python变量命名规则python是动态编译语言,不用事先声明类型,赋值即声明。1.要具有描述性2.变量名只能是:数字,字母组成,不可以是空格或特殊字符,如:(#?。,¥$*~!&)等3.不能是中文4.不能以数字开头5.保留字符是不能被使用,如下:[‘and’,’as’,’assert’,’break’,’class’,’continue’,’def’,’del’,’eli…

    2022年6月6日
    36
  • 汉明码实现

    汉明码实现汉明码实现 可以利用 matlab 中的 encode 和 decode 实现 但是 下面是自己实现的 m 文件程序功能 1 nbsp HanMingH 生成监督矩阵 nbsp nbsp nbsp nbsp nbsp nbsp 2 HanMingG 生成系统生成矩阵 nbsp nbsp nbsp nbsp nbsp nbsp 3 FindR 计算监督位的数目 nbsp nbsp nbsp nbsp nbsp nbsp 4 FindError 生成错误校正图样 用于纠正错误编码 Main nbsp clc

    2025年11月6日
    3
  • adventureworksdw2012_示例数据库怎么导入

    adventureworksdw2012_示例数据库怎么导入1、http://sqlserversamples.codeplex.com/通过网站下载示例数据库,http://msftdbprodsamples.codeplex.com/releases/view/55926 为下载地址2、其中安装AdventureWorks2008R2(oltp)的时候,需要开启sqlserver的filestream功能。点击计算机-管理-右

    2025年11月1日
    4
  • 关于Maven项目build时出现No compiler is provided in this environment的处理[通俗易懂]

    关于Maven项目build时出现No compiler is provided in this environment的处理[通俗易懂]近日有同事遇到在编译Maven项目时出现[ERROR]Nocompilerisprovidedinthisenvironment.PerhapsyouarerunningonaJREratherthanaJDK?的问题,原以为这是个个例,源于同事粗心,配置环境出问题造成,后到百度查看一下,遇到这个问题的不在少数,但是对问题的解释没有说到根源,

    2025年8月24日
    3
  • 登录mysql数据库的几种方式

    登录mysql数据库的几种方式登录mysql数据库的几种方式

    2022年7月17日
    13
  • wsl2 ubuntu 20.04_卸载wsl ubuntu

    wsl2 ubuntu 20.04_卸载wsl ubuntu最近Ubuntu22.04正式发布了,我使用的Ubuntu还是WSL2中的20.04版本,故前来升级。不过坑确实比想象中的多,遂来尝试总结一下,希望能帮助到有需要的同学。不过其实最后,大家会发现,改国内源一把梭,啥问题都解决了::>_………

    2022年10月8日
    4

发表回复

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

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