LSTM预测

超好英文博客:understanding LSTM

LSTM ->Long Short-Term Memory,长短时记忆神经网络,1997年提出,主要用于解决RNN没办法长时间记忆(对于很久前的信息RNN会有一种失效的问题),是一种基于RNN变化的神经网络(使得神经网络具有对很久前的信息仍有记忆效果),现广泛应用于自然语言处理(NLP),时间序列预测和构建一些高层次的模型。

我们先透过LSTM的模型内部,去挖掘LSTM学习长期依赖信息的秘密:

首先,我们要清楚的认识到,LSTM最上面有一层细胞层Ct,是信息的载体,用于记录数据的变化:

  • 遗忘门


     

遗忘门是LSTM模型的第一步,它接收于上一个神经元传入的信息ht-1和新传入的信息Xt,通过sigmoid函数对所有信息进行处理,得到ft传入细胞状态Ct,ft位于0-1,越接近0 -> 遗忘,越接近1 -> 记得

  • 输入门

输入门是LSTM的第二步,它把ht和xt分别用sigmoid和tanh函数进行运算,确定我们需要更新的数据。
sigmoid的用处:决定什么值要更新(筛选)

  • 更新门

更新门是LSTM的第三步,它通过矩阵相乘和矩阵相加,把需要遗忘的数据和需要更新的数据传入细胞Ct,进行细胞状态的更新

  • 输出门


最后是输出门,通过对细胞状态Ct使用tanh函数更新出新的信息ht,输出到下一个LSTM神经元中。

sigmoid的用处:确定细胞状态Ct哪些部分输出出去(筛选)

当然这些都是我比较浅显的理解,详细可见我的参考文章理解 LSTM(Long Short-Term Memory, LSTM) 网络 

关于LSTM的优缺点,可以查看这篇文章LSTM网络模型的原理和优缺点
建立LSTM ->pytorch

# LSTM pytorch模型
import torch
from torch import nn
from torch.autograd import Variable

#默认linner为一层,如果有需要可自行添加
class lstm(nn.Module):
    def __init__(self,input_size=2,hidden_size=4,output_size=1,num_layer=2):
        super(lstm,self).__init__()
        self.layer1 = nn.LSTM(input_size,hidden_size,num_layer)
        self.layer2 = nn.Linear(hidden_size,output_size)#输出层
    
    def forward(self,x):
        x,_ = self.layer1(x)  #输入:(seq_len,batch,input_size)
        s,b,h = x.shape  #输出:(seq_len,batch,hidden_size)
        x = x.view(s*b,h) #调整模型的样子,使其能够进入线性层
        x = self.layer2(x) 
        x = x.view(s,b,-1)  #把模型原貌改回来
        return x

当然基于Tensorflow的keras里面也有直接封装好的方法:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense, GRU, LSTM, Bidirectional, Dropout, Concatenate, Dot, Activation, RepeatVector,Reshape
from tensorflow.keras.callbacks import EarlyStopping

hidden_size = 100

inputs = Input(shape=(None,1))

# LSTM layer
lstm = LSTM(hidden_size, return_sequences=True)(inputs)


# Fully connected layer
fc_layer = Dense(hidden_size*2, activation='relu')(lstm)

# Output layer
outputs = Dense(1)(fc_layer)

# Define model
model = Model(inputs=inputs, outputs=outputs)

model.summary()

bishe可联系QQ:2663505372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值