Pytorch LSTM初识(详解LSTM+torch.nn.LSTM()实现)1

本文深入介绍了LSTM的工作原理,包括遗忘门、输入门、细胞状态更新和输出门。接着,详细讨论了PyTorch中LSTM的实现,包括参数设置、计算公式,并给出了两个实例。此外,还解释了LSTM模型的输入输出结构。
摘要由CSDN通过智能技术生成

pytorch  LSTM1初识

 

目录

pytorch  LSTM1初识

​​​​​​​​​​​​​​​​​​​​​

一、LSTM简介1

1.1    遗忘门,

1.2    确定什么样的新信息被存放在当前Cell中(也即中)。

1.3    确定更新Cell中的信息

1.4    输出(这里ht既是实际输出,也是下一层的隐藏层输入,具体如图所示)

二、LSTM简介2

三、pytorch实现

3.1    定义LSTM

3.2     定义好LSTM ()后参数,这里不明白,可先看下面实例,再回头看此项:

3.3    计算公式

3.4    LSTM实例1:

3.5    LSTM实例2:

3.6    Pytorch中LSTM模型图:


​​​​​​​

一、LSTM简介1

LSTM整体图:

1.1    遗忘门,

决定是否丢弃或丢弃多少Cell中所存的之前的信息(也即Ct-1中)。sigmoid输出0到1之间的数字,数值的大小操作决定多少信息可以传送过去;当为0时,不传送;当为1时,全部传送。

计算公式:

1.2    确定什么样的新信息被存放在当前Cell(也即C_{t}中)。

首先,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后, tanh 层创建一个新的候选值向量\tilde{C_{t}}\tilde{C_{t}}会被加入到状态中。

sigmoid 层计算公式

tanh 层计算公式

1.3    确定更新Cell中的信息

计算公式

 

符号:\odot,是Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。

1.4    输出(这里ht既是实际输出y_{t},也是下一层的隐藏层输入h_{t},具体如图所示)

首先, sigmoid 层来确定Cell状态的哪个部分将输出出去;然后,把C

实现LSTM可以分为以下几个步骤: 1. 初始化权重和偏置 ```python def init_weights(input_size, hidden_size): weight_ih = torch.randn(4 * hidden_size, input_size) weight_hh = torch.randn(4 * hidden_size, hidden_size) bias_ih = torch.zeros(4 * hidden_size) bias_hh = torch.zeros(4 * hidden_size) return weight_ih, weight_hh, bias_ih, bias_hh ``` 2. 实现LSTM的前向传播 ```python def forward(x, weight_ih, weight_hh, bias_ih, bias_hh, hidden, cell): # 计算输入门、遗忘门、输出门以及候选细胞状态 gates = torch.mm(x, weight_ih.t()) + torch.mm(hidden, weight_hh.t()) + bias_ih + bias_hh input_gate, forget_gate, output_gate, candidate_cell_state = gates.chunk(4, 1) # 计算细胞状态和隐藏状态 input_gate = torch.sigmoid(input_gate) forget_gate = torch.sigmoid(forget_gate) output_gate = torch.sigmoid(output_gate) candidate_cell_state = torch.tanh(candidate_cell_state) cell = forget_gate * cell + input_gate * candidate_cell_state hidden = output_gate * torch.tanh(cell) return hidden, cell ``` 3. 启动LSTM的训练过程 ```python # 定义超参数 input_size = 10 hidden_size = 20 seq_len = 5 batch_size = 3 # 初始化权重和偏置 weight_ih, weight_hh, bias_ih, bias_hh = init_weights(input_size, hidden_size) # 初始化隐藏状态和细胞状态 hidden = torch.zeros(batch_size, hidden_size) cell = torch.zeros(batch_size, hidden_size) # 生成随机输入序列 inputs = torch.randn(seq_len, batch_size, input_size) # 前向传播 for i in range(seq_len): hidden, cell = forward(inputs[i], weight_ih, weight_hh, bias_ih, bias_hh, hidden, cell) # 输出最后一个隐藏状态 print(hidden[-1]) ``` 这样,我们就实现了一个基于PytorchLSTM模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值