目录
环境以及第三方库版本
LSTM模型
遗忘门(决定上一时刻的单元状态有多少要保存到当前时刻)
输入门(决定当前网络状态输入有多少需要保存到单元状态)
输出门(控制当前状态单元有多少需要输出到当前输出值)
nn.LSTM()参数介绍
LSTM输入
LSTM输出
LSTM实例
参考
Name: torch Version: 1.8.0
Name: torchvision Version: 0.9.0
Name: torchtext Version: 0.12.0
Name: jieba Version: 0.42.1
涉及LSTM,我们一定会讲述到RNN(循环神经网络),LSTM是一个特殊的RNN网络。下面为一个RNN的示例图。RNN会不断循环,而且随着输入数据的增加,会将上一次的状态传递到下一个输入,直到输入结束或者训练结束,最终的输出即为预测结果。但RNN仅保留最近的信息,所以RNN对过去的单元状态关注度不高,提取有用时序信息较少。而且RNN只有短期记忆而没有长期记忆。RNN使用反向传播及时更新权重,容易遭受梯度爆炸的影响,较难收敛。RNN如果使用ReLu激活函数,则会受到死亡ReLu单元的影响。 导致停止学习等问题。
LSTM是RNN模型的一个变体,LSTM单个循环结构有四个状态—— t-1,t时刻的单元状态和t-1,t的输出。相对于RNN更能够保持持久的单元状态从而不受到改变,而且可以自主决定状态和信息需要遗忘或者传递。
输入:上一层的输出和输入
输出:
备注:但在这里不知道是什么。
为遗忘门输出结果,即为根据上一时刻的输出保存的状态信息。后续了解到是偏置权重,当bias=True的时候存在)
输入: 上一层的输出和输入
其他的参数为权重矩阵,
如上同理。
输出:输入通过输入门后保留的信息和当前时刻暂存状态的
输入:上一个时刻的单元状态,遗忘门输出
,输入门输出
,单元状态的输出
输出:当前LSTM单元的的状态
下文主要介绍的是nn.lstm()输入和输出参数。
class lSTM(Module):
def __init__(self, mode, input_size, hidden_size,
num_layers=1, bias=True, batch_first=False,
dropout=0., bidirectional=False)
nn.lstm(input, (h_0, c_0))
备注
比如数据为data = 1,2,3,4,5,6,7,8,9。我们设置seq_len为3,数据变成了[1,2,3][2,3,4][3,4,5]等等依次类推。但是在pytorch中用默认的dataloader的话在__init__(super,self)中默认为1。使用这里我们用Field方法解决。
假如你的一个句子中只有2个单词,但是要求输入10个单词,这个时候可以一般我们使用embedding的层的时候会帮助我们设置好的。如果有其他需求我们则用
torch.nn.utils.rnn.pack_padded_sequence()
或者torch.nn.utils.rnn.pack_sequence()
来对句子进行填充或者截断。
bidirectional
决定,如果为False,则等于1;反之等于2。Outputs: output, (h_n, c_n)
运用的是参考pytorch入门到实践的LSTM中文分类代码。
具体代码在github有源码。欢迎指正和修改。具体可以定位到第七章的7.1.3部分。数据位于data/chap7目录。
关于深度学习pytorch实践的有关代码
长短期记忆神经网络(LSTM)介绍以及简单应用分析
理解Pytorch中LSTM的输入输出参数含义
pytorch官方网站关于lstm参数介绍
Pytorch中如何理解RNN LSTM的input(重点理解seq_len/time_steps) - 知乎