Pytorch中nn.LSTM与nn.LSTMCell

本文介绍了Pytorch中的LSTM和LSTMCell类,包括它们的计算过程、参数说明以及输入输出格式。LSTM用于处理序列数据,而LSTMCell是其基本单元,适用于手动管理每个时间步的计算。
部署运行你感兴趣的模型镜像

class torch.nn.LSTM(*args, **kwargs)

在这里插入图片描述

对输入序列的每个元素,LSTM的每层都会执行以下计算:
在这里插入图片描述

hth_tht是时刻ttt的隐状态,ctc_tct是时刻ttt的细胞状态,xtx_txt是上一层的在时刻ttt的隐状态或者是第一层在时刻ttt的输入。it,ft,gt,oti_t, f_t, g_t, o_tit,ft,gt,ot 分别代表 输入门,遗忘门,细胞和输出门。

参数说明:

  • input_size – 输入的特征维度,(特征向量的长度,如2048)
    hidden_size – 隐状态的特征维度,(每个LSTM单元或者时间步的输出的ht的维度,单元内部有权重与偏差计算)
    num_layers – 层数(和时序展开要区分开), RNN层的个数(在竖直方向堆叠的多个相同个数单元的层数)
    bias – 如果为False,那么LSTM将不会使用bih,bhhb_{ih},b_{hh}bih,bhh,默认为True。
    batch_first – 如果为True,那么输入和输出Tensor的形状为(batch, seq, feature)
    dropout – 如果非零的话,将会在RNN的输出上加个dropout,最后一层除外。
    bidirectional – 如果为True,将会变成一个双向RNN,默认为False。

LSTM输入: input, (h_0, c_0)

  • input (seq_len, batch, input_size): 包含输入序列特征的Tensor。也可以是packed variable。 时间步数或序列长度,batch数,输入特征维度。如果设置了batch_first,则batch为第一维。
  • h_0 (num_layers * num_directions, batch,hidden_size):保存着batch中每个元素的初始化隐状态的Tensor
  • c_0 (num_layers *num_directions, batch, hidden_size): 保存着batch中每个元素的初始化细胞状态的Tensor

LSTM输出 output, (h_n, c_n)

  • output (seq_len, batch, hidden_size * num_directions):保存RNN最后一层的输出的Tensor。 如果输入是torch.nn.utils.rnn.PackedSequence,那么输出也是torch.nn.utils.rnn.PackedSequence。包含每一个时刻的输出特征,如果设置了batch_first,则batch为第一维
  • h_n (num_layers * num_directions, batch, hidden_size): Tensor,保存着RNN最后一个时间步的隐状态。
  • c_n (num_layers * num_directions, batch, hidden_size): Tensor,保存着RNN最后一个时间步的细胞状态。

LSTM模型参数:

  • weight_ih_l[k] – 第k层可学习的input-hidden权重(Wii∣Wif∣Wig∣WioW_{ii}|W_{if}|W_{ig}|W_{io}WiiWifWigWio),形状为(input_size x 4*hidden_size)
  • weight_hh_l[k] – 第k层可学习的hidden-hidden权重(Whi∣Whf∣Whg∣WhoW_{hi}|W_{hf}|W_{hg}|W_{ho}WhiWhfWhgWho),形状为(hidden_size x 4*hidden_size)。
  • bias_ih_l[k] – 第k层可学习的input-hidden偏置(bii∣bif∣big∣biob_{ii}|b_{if}|b_{ig}|b_{io}biibifbigbio),形状为( 4*hidden_size)
  • bias_hh_l[k] –第k层可学习的hidden-hidden偏置(bhi∣bhf∣bhg∣bhob_{hi}|b_{hf}|b_{hg}|b_{ho}bhibhfbhgbho),形状为(4*hidden_size)。

示例:

lstm = nn.LSTM(10, 20, 2)#[feature_len,hidden_len,num_layers]
input = Variable(torch.randn(5, 3, 10))
h0 = Variable(torch.randn(2, 3, 20))
c0 = Variable(torch.randn(2, 3, 20))
output, hn = lstm(input, (h0, c0))

class torch.nn.LSTMCell(input_size, hidden_size, bias=True)

该模块构建LSTM中的一个Cell,同一层会共享这一个Cell,但要手动处理每个时刻的迭代计算过程。如果要建立多层的LSTM,就要建立多个nn.LSTMCell。
在这里插入图片描述
参数:

  • input_size – 输入的特征维度。
  • hidden_size – 隐状态的维度。
  • bias – 如果为False,那么将不会使用bias。默认为True。

输入: input, (h_0, c_0)

  • input (seq_len, batch, input_size): 包含输入序列特征的Tensor。也可以是packed variable
  • h_0 ( batch, hidden_size):保存着batch中每个元素的初始化隐状态的Tensor
  • c_0 (batch, hidden_size): 保存着batch中每个元素的初始化细胞状态的Tensor

输出: h_1, c_1

  • h_1 (batch, hidden_size): 下一个时刻的隐状态。
  • c_1 (batch, hidden_size): 下一个时刻的细胞状态。

模型参数:

  • weight_ih – input-hidden权重(Wii∣Wif∣Wig∣WioW_{ii}|W_{if}|W_{ig}|W_{io}WiiWifWigWio),形状为(input_size x 4*hidden_size)
  • weight_hh – hidden-hidden权重(Whi∣Whf∣Whg∣WhoW_{hi}|W_{hf}|W_{hg}|W_{ho}WhiWhfWhgWho),形状为(hidden_size x 4*hidden_size)。
  • bias_ih – input-hidden偏置(bii∣bif∣big∣biob_{ii}|b_{if}|b_{ig}|b_{io}biibifbigbio),形状为( 4*hidden_size)
  • bias_hh – hidden-hidden偏置(bhi∣bhf∣bhg∣bhob_{hi}|b_{hf}|b_{hg}|b_{ho}bhibhfbhgbho),形状为( 4*hidden_size)。

实例:

rnn = nn.LSTMCell(10, 20)
input = Variable(torch.randn(6, 3, 10))
hx = Variable(torch.randn(3, 20))
cx = Variable(torch.randn(3, 20))
output = []
for i in range(6):
   hx, cx = rnn(input[i], (hx, cx))
   output.append(hx)

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值