精华内容
下载资源
问答
  • LSTM模型

    千次阅读 2020-08-22 14:26:29
    LSTM模型 一:简介: LSTM模型,是循环神经网络的一种变体,可以很有效的解决简单循环神经网络的梯度爆炸或消失问题。 二:优缺点: 优点:改善了RNN中存在的长期依赖问题;LSTM的表现通常比时间递归神经网络及隐...

    LSTM模型

    一:简介:
    LSTM模型,是循环神经网络的一种变体,可以很有效的解决简单循环神经网络的梯度爆炸或消失问题。

    二:优缺点:
    优点:改善了RNN中存在的长期依赖问题;LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好;作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。
    缺点:一个缺点是RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手;另一个缺点是每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。

    三:代码实现

    from keras.datasets import mnist
    #加载数据
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    print('x_train.shape:',x_train.shape)
    print('x_test.shape:',x_test.shape)
    输出:
    ('x_train.shape:', (60000, 28, 28))
    ('x_test.shape:', (10000, 28, 28))
    #时间序列数量
    n_step = 28
    #每次输入的维度
    n_input = 28
    #分类类别数
    n_classes = 10
    #将数据转为28*28的数据(n_samples,height,width)
    x_train = x_train.reshape(-1, n_step, n_input)
    x_test = x_test.reshape(-1, n_step, n_input)
    x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
    #标准化数据,因为像素值在0-255之间,所以除以255后数值在0-1之间
    x_train /= 255
    x_test /= 255
    #y_train,y_test 进行 one-hot-encoding,label为0-9的数字,所以一共10类
    y_train = keras.utils.to_categorical(y_train, n_classes)
    y_test = keras.utils.to_categorical(y_test, n_classes)
    #时间序列数量
    n_step = 28
    #每次输入的维度
    n_input = 28
    #分类类别数
    n_classes = 10
    #将数据转为28*28的数据(n_samples,height,width)
    x_train = x_train.reshape(-1, n_step, n_input)
    x_test = x_test.reshape(-1, n_step, n_input)
    x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
    #标准化数据,因为像素值在0-255之间,所以除以255后数值在0-1之间
    x_train /= 255
    x_test /= 255
    #y_train,y_test 进行 one-hot-encoding,label为0-9的数字,所以一共10类
    y_train = keras.utils.to_categorical(y_train, n_classes)
    y_test = keras.utils.to_categorical(y_test, n_classes)
    from keras import Sequential
    from keras.layers import LSTM,Dense, Activation
    from keras import optimizers
    #使用Sequential,简单搭建lstm模型
    model = Sequential()
    #这个网络中,我们采用LSTM+Dense 层+激活层,优化函数采用Adam,
    #损失函数采用交叉熵,评估采用正确率。
    #学习率
    learning_rate = 0.001
    #每次处理的数量
    batch_size = 28
    #循环次数
    epochs = 20
    #神经元的数量
    n_lstm_out = 128
    #LSTM层
    model.add(LSTM(
            units = n_lstm_out,
            input_shape = (n_step, n_input)))
    #全连接层          
    model.add(Dense(units = n_classes))
    #激活层
    model.add(Activation('softmax'))
    #查看各层的基本信息
    model.summary()
    # 编译
    model.compile(
        optimizer = optimizers.Adam(lr = learning_rate),
        loss = 'categorical_crossentropy',
        metrics = ['accuracy'])
    #训练
    model.fit(x_train, y_train, 
              epochs = epochs, 
              batch_size= batch_size, 
              verbose = 1, 
              validation_data = (x_test,y_test))
    #评估
    score = model.evaluate(x_test, y_test, 
                           batch_size = batch_size, 
                           verbose = 1)
    print('loss:',score[0])
    print('acc:',score[1])
    展开全文
  • LSTM模型学习

    2018-12-06 21:23:37
    基于python3.6实现的,Keras相关资源:LSTM预测模型训练,IMDB数据加载,国际旅行人数预测,IMDB影评分类预测,数据标准化,模型保存到本地,从本地加载训练好的模型,plt图形绘制,以及IMDB数据和国际旅行人数...
  • 因此,为了解决这个问题,**长短时记忆(LSTM)**结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。具体地说, 就是把循环神经网络中隐含层的小圆圈换成长短时...

    循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息。然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限。这个问题就使得隐含层的输入对于网络输出的影响随着网络环路的不断递归而衰退。因此,为了解决这个问题,**长短时记忆(LSTM)**结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。具体地说,就是把循环神经网络中隐含层的小圆圈换成长短时记忆的模块
    LSTM处理序列问题有效的关键在于门结构,通过门结构去除或者增加信息到细胞状态的能力。
    **

    1.Bi-directional Long Short-Term Memory(双向LSTM)结构

    **
    简单来说双向LSTM就是把BRNN中隐含层的小圆圈换成了长短时记忆的模块。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。这个模块的样子如下图所示:
    LSTM模型
    参数介绍:
    参数
    计算公式:
    **

    • 遗忘门
      遗忘门能决定应丢弃或保留哪些信息。来自先前隐藏状态的信息和当前输入的信息同时输入到Sigmoid函数,输出值处于0和1之间,越接近0意味着越应该忘记,越接近1意味着越应该保留。这个f就可以用来操控遗忘哪些数据。
      遗忘门
    • 输入门
      f是forget的意思,i是input的意思。
      输入门用来更新单元状态。先将先前隐藏状态的信息和当前输入的信息输入到Sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要。也可将隐藏状态和当前输入传输给Tanh函数,并在-1和1之间压缩数值以调节网络,然后把Tanh输出和Sigmoid输出相乘,Sigmoid输出将决定在Tanh输出中哪些信息是重要的且需要进行保留。
      输入门
      **
    • 更新细胞状态:下图展示了两个门是如何控制遗忘和输出的。
      更新细胞状态
      **
    • 输出门
      我们确定了当前的状态,那么当前状态的多少可以进行输出呢?控制Ct输出的门叫输出门,用Ot表示。
      输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息。当然,隐藏状态也可用于预测。首先把先前的隐藏状态和当前输入传递给Sigmoid函数;接着把新得到的单元状态传递给Tanh函数;然后把Tanh输出和Sigmoid输出相乘,以确定隐藏状态应携带的信息;最后把隐藏状态作为当前单元输出,把新的单元状态和新的隐藏状态传输给下个时间步。输出门

    LSTM的变种GRU
    GRU
    **

    **
    **

    知乎中讨论LSTM为何如此有效

    **

    2.双向LSTM

    **
    RNN和LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。即:
    对于每个时刻t,输入会同时提供给两个方向相反的RNN,输出由这两个单向RNN共同决定。
    双向RNN

    #Tensorflow中实现双向RNNs

    在tensorflow中已经提供了双向RNNs的接口,使用**tf.contrib.rnn.bidirectional_dynamic_rnn()**这个函数,就可以很方便的构建双向RNN网络。

    def bidirectional_dynamic_rnn(
    cell_fw, # 前向RNN
    cell_bw, # 后向RNN
    inputs, # 输入  
    sequence_length=None,# 输入序列的实际长度(可选,默认为输入序列的最大长度)
    initial_state_fw=None,  # 前向的初始化状态(可选)
    initial_state_bw=None,  # 后向的初始化状态(可选)
    dtype=None, # 初始化和输出的数据类型(可选)
    parallel_iterations=None,
    swap_memory=False, 
    time_major=False,
    # 决定了输入输出tensor的格式:如果为true, 向量的形状必须为 `[max_time, batch_size, depth]`. 
    # 如果为false, tensor的形状必须为`[batch_size, max_time, depth]`. 
    scope=None
    )
    

    当输入的inputs张量的维度为:[batch_size,max_len,embeddings_num],此时time_major = False(一般设为这个);当输入的inputs张量的维度为:[max_len,batch_size,embeddings_num],此时time_major = True
    返回值:
    元组: (outputs, output_states)

    • outputs为(output_fw, output_bw),是一个包含前向cell输出tensor和后向cell输出tensor组成的元组。假设
      time_major=false, output_fw和output_bw的shape为**[batch_size, max_len,
      hiddens_num]。在此情况下,最终的outputs可以用tf.concat([output_fw,
      output_bw],-1)tf.cocat([output_fw, output_bw],2)**

    • output_states为(output_state_fw, output_state_bw),包含了前向和后向最后的隐藏状态的组成的元组。 output_state_fw和output_state_bw的类型为LSTMStateTuple。 LSTMStateTuple由**(c,h)**组成,分别代表memory cell和hidden state。

    最近在做文本分类,使用到了双向LSTM(BiLSTM),其具体实现为:

    #前向LSTM
    fw_cell = tf.nn.rnn_cell.LSTMCell(self.cell_hidden_size, name="fw_lstm")
    #后向LSTM
    bw_cell = tf.nn.rnn_cell.LSTMCell(self.cell_hidden_size, name ="bw_lstm")
    #构建双向LSTM网络
    outputs, _ = tf.nn.bidirectional_dynamic_rnn(fw_cell,bw_cell,embedding_inputs_dense,sen_len,dtype=tf.float32)
    #outputs包含一个前向的cell和后向的cell组成的元组
    lstm_contact = tf.concat(outputs, 2) 
    lstm_contact = tf.reduce_mean(lstm_contact, axis=1)
    
    展开全文
  • LSTM及peehole LSTM模型

    2021-03-25 15:26:34
    1、LSTM模型 其中ooo表示元素相乘,遗忘门fff,输入们iii,输出门ooo,σgσ_gσg​,σcσ_cσc​分别为sigmoid函数与tanh函数。WWW和bbb分别为权重和偏置。c~\widetilde{c}ct为记忆单元的候选值,ctc_tct​ 为记忆...

    1、LSTM模型

    在这里插入图片描述
    在这里插入图片描述
    其中oo表示元素相乘,遗忘门ff,输入们ii,输出门oo,σgσ_g,σcσ_c分别为sigmoid函数与tanh函数。WWbb分别为权重和偏置。c~\widetilde{c}t为记忆单元的候选值,ctc_t 为记忆细胞的更新值。
    (图片及公式来源于维基百科)

    2、peehole LSTM模型

    peehole LSTM中各个门值不仅取决于hht-1xtx_t,也可以偷窥一下cct-1的值
    在这里插入图片描述
    (图片取自维基百科)
    在这里插入图片描述
    (图片及公式取于http://colah.github.io/posts/2015-08-Understanding-LSTMs/)

    展开全文
  • LSTM模型详解

    万次阅读 多人点赞 2018-03-08 15:37:47
    (一)LSTM模型理解1.长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降...

    (一)LSTM模型理解

    1.长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降,导致网络权重更新缓慢,无法体现出RNN的长期记忆的效果,因此需要一个存储单元来存储记忆,因此LSTM模型被提出;

    2.下面两个图可以看出RNN与LSTM的区别:

    (1)RNN


    (2)LSTM


    PS:

    (1)部分图形含义如下:


    (2)RNN与LSTM最大的区别在于LSTM中最顶层多了一条名为“cell state”的信息传送带,其实也就是信息记忆的地方;

    3.LSTM的核心思想:

    (1)理解LSTM的核心是“cell state”,暂且名为细胞状态,也就是上述图中最顶的传送线,如下:


    (2)cell state也可以理解为传送带,个人理解其实就是整个模型中的记忆空间,随着时间而变化的,当然,传送带本身是无法控制哪些信息是否被记忆,起控制作用的是下面将讲述的控制门(gate);

    (3)控制门的结构如下:主要由一个sigmoid函数跟点乘操作组成;sigmoid函数的值为0-1之间,点乘操作决定多少信息可以传送过去,当为0时,不传送,当为1时,全部传送;

    (4)LSTM中有3个控制门:输入门,输出门,记忆门;

    4.LSTM工作原理:

    (1)forget gate:选择忘记过去某些信息:


    (2)input gate:记忆现在的某些信息:


    (3)将过去与现在的记忆进行合并:


    (4)output gate:输出


    PS:以上是标准的LSTM的结构,实际应用中常常根据需要进行稍微改善;

    5.LSTM的改善

    (1)peephole connections:为每个门的输入增加一个cell state的信号


    (2)coupled forget and input gates:合并忘记门与输入门

    (二)LSTM模型推导


    1.LSTM模型的思想是将RNN中的每个隐藏单元换成了具有记忆功能的cell(如上图所示),其余的跟RNN一样;

    2.每个cell的组成如下:

    (1)输入节点(gc):与RNN中的一样,接受上一个时刻点的隐藏节点的输出以及当前的输入作为输入,然后通过一个tanh的激活函数;

    (2)输入门(ic):起控制输入信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将输入门的输出与输入节点的输出相乘可以起控制信息量的作用);

    (3)内部状态节点(sc):输入为被输入门过滤后的当前输入以及前一时间点的内部状态节点输出,如图中公式;

    (4)忘记门(fc):起控制内部状态信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将内部状态节点的输出与忘记门的输出相乘可以起控制信息量的作用);

    (5)输出门(oc):起控制输出信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将输出门的输出与内部状态节点的输出相乘可以起控制信息量的作用);

    3.LSTM层的计算可以表示如下(若干个cell组成一个LSTM层):


    PS:公式1 中的Wih应改为Wgh;圆圈表示点乘;

    4.具有2个cell的LSTM模型如下:

    展开全文
  • LSTM模型介绍

    千次阅读 2019-04-29 17:55:30
    LSTM模型,是循环神经网络的一种变体,可以很有效的解决简单循环神经网络的梯度爆炸或消失问题。 新的内部状态LSTM网络引入一个新的内部状态Ct专门进行线性的循环信息传递,同时(非线性)输出信息给隐藏层的外部...
  • LSTM模型理解

    千次阅读 2019-02-11 23:01:26
    之前一直想要了解一下LSTM模型的想法,看到一些介绍,说里面的各种门,遗忘门,输入门,输出门,是模拟电路的,然后自己就一直很莫名其妙,怎么还有电路什么的,然后就各种一直看不懂。。。现在回过头来仔细的看了看...
  • 5.3 LSTM模型

    2020-05-17 21:37:21
    3 LSTM模型 学习目标: 了解LSTM内部结构及计算公式. 掌握Pytorch中LSTM工具的使用. 了解LSTM的优势与缺点. LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, ...
  • 深度学习在自然语言处理中的应用,Tensorflow下构建LSTM模型进行序列化标注
  • Pytorch实现的LSTM模型结构

    千次阅读 2021-03-27 19:25:40
    LSTM模型结构1、LSTM模型结构2、LSTM网络3、LSTM的输入结构4、Pytorch中的LSTM4.1、pytorch中定义的LSTM模型4.2、喂给LSTM的数据格式4.3、LSTM的output格式5、LSTM和其他网络组合 1、LSTM模型结构 BP网络和CNN网络...
  • lstm时间序列预测模型 时间序列-LSTM模型 (Time Series - LSTM Model) Advertisements 广告 Previous Page 上一页 Next Page 下一页 Now, we are familiar with statistical modelling on time series...
  • TensorFlow2.0之GRU模型、LSTM模型
  • LSTM模型在C LSTM模型在C中的实现
  • 基于TensorFlow的lstm模型,多维时序数据预测,可自行修改网络参数。
  • 时间序列预测(四)—— LSTM模型

    万次阅读 多人点赞 2019-05-20 15:28:38
    时间序列预测(四)—— LSTM模型 文章链接 (一)数据预处理 (二)AR模型(自回归模型) (三)Xgboost模型 (四)LSTM模型 (五)Prophet模型(自回归模型) 模型原理   LSTM(Long-short time memory,LSTM)...
  • grid lstm模型简介

    千次阅读 2018-08-21 18:26:39
    理论介绍 主要通过论文《Grid Long short-Term Memory》。 grid LSTM沿着任何或所有维度(包括网络深度)部署cell。 一个Grid LSTM网络的block有N个hidden vector...标准的lstm模型的计算公式如下: 源码介绍...
  • LSTM模型相关知识

    2018-04-20 18:50:15
    知识链接:如何判断lstm模型中的过拟合和欠拟合等情况:点击打开链接
  • LSTM模型概述

    千次阅读 2017-01-17 16:46:20
    LSTM(Long Short Term Memory)长短期记忆单元模型: 首先介绍一下RNN模型。之前比较熟悉的是CNN网络,但是CNN所处理的对象很大程度上是图像,但是针对自然语言处理的理解,不止对当前的输入有关,还需要记忆和关联...
  • LSTM模型简介及Tensorflow实现

    千次阅读 2017-11-14 17:21:30
    LSTM模型及TF实现
  • Tree-Structured LSTM模型

    2021-03-16 16:35:41
    Tree-Structured LSTM模型 论文概要 由于能够保持按照时序的序列信息,LSTM(Long Short-Term Memory)网络在序列模型任务上能够有非常好的表现。但是该模型只能输入线型的序列,对于树型的输入(比如依赖树)无法很好...
  • LSTM模型(转载)

    2017-04-01 15:34:22
    (一)LSTM模型理解 1.长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降...
  • 学习LSTM模型

    千次阅读 2018-10-28 22:07:55
    原文链接:Understanding LSTM Networks 注:非全部翻译,有部分为自我添加,有部分原文未全翻译。 全连接或卷积神经网络模型中,网络结构都是从输入层到隐藏层再到输出层,层与层之间都是全连接或部分连接,但每...
  • LSTM模型搭建

    2020-12-08 10:48:45
    def LSTM_Classifier(self, train, trainLabel, test, testLabel, val_test, val_label, new_test=None): train, test = np.array(train), np.array(test) train, test = train.reshape(train.shape[0], 1, train...
  • LSTM模型的两种分解技巧

    万次阅读 2018-07-21 11:13:22
    LSTM模型在语言模型,机器翻译等领域取得了非凡的成就,然后LSTM网络有几百万的参数以及需要数周在多GPU系统中进行训练。因此,一下介绍两种方法来缩减网络参数以及训练时间。两种方法分别为factorized LSTM(FLSTM...
  • 一种评估LSTM模型置信度方法

    千次阅读 2019-06-27 11:37:30
    一种评估聊天机器人输出置信度的方法为什么需要评估聊天机器人输出置信度算法计算LSTM模型置信度python代码测试结果 为什么需要评估聊天机器人输出置信度 使用LSTM构建聊天机器人,无论输入是什么,就算输入完全不...
  • PyTorch 中的 LSTM模型参数解释
  • LSTM模型预测时间序列(快速上手)

    千次阅读 2020-10-29 20:52:49
    LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要...
  • LSTM模型的输入参数问题(Keras) https://zhuanlan.zhihu.com/p/121715190 基于时间序列的LSTM的数据格式是怎么样? 我现在在做一个LSTM做一个预测值,不知道该传什么格式的数据给X,把数据集弄成什么样子能传。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,497
精华内容 20,598
关键字:

一些lstm模型