关于torch.nn.LSTM()的详解(维度,输入,输出)

本文详细解析了PyTorch中torch.nn.LSTM()函数的使用方法,包括各参数含义、输入输出数据格式及维度要求,适用于已有LSTM算法基础的学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

如果您是想了解LSTM算法,您不必往下阅读,因为本博文是关于torch.nn.LSTM()的一些详解,是在读者有LSTM算法思想之后复现LSTM时用到。

输入的参数列表包括:

  • input_size: 输入数据的特征维数,通常就是embedding_dim(词向量的维度)
  • hidden_size: LSTM中隐层的维度
  • num_layers: 循环神经网络的层数
  • bias: 用不用偏置,default=True
  • batch_first: 这个要注意,通常我们输入的数据shape=(batch_size,seq_length,embedding_dim),而batch_first默认是False,所以我们的输入数据最好送进LSTM之前将batch_size与seq_length这两个维度调换
  • dropout: 默认是0,代表不用dropout
  • bidirectional: 默认是false,代表不用双向LSTM

输入数据包括input, (h_0, c_0):

  • input: shape = [seq_length, batch_size, input_size]的张量
  • h_0: shape = [num_layers * num_directions, batch, hidden_size]的张量,它包含了在当前这个batch_size中每个句子的初始隐藏状态,num_layers就是LSTM的层数,如果bidirectional = True,则num_directions = 2,否则就是1,表示只有一个方向
  • c_0: 与h_0的形状相同,它包含的是在当前这个batch_size中的每个句子的初始细胞状态。h_0,c_0如果不提供,那么默认是0

输出数据包括output, (h_t, c_t):

  • output.shape = [seq_length, batch_size, num_directions * hidden_size]
    它包含的LSTM的最后一层的输出特征(h_t),t是batch_size中每个句子的长度.
  • h_t.shape = [num_directions * num_layers, batch, hidden_size]
  • c_t.shape = h_t.shape

h_n包含的是句子的最后一个单词的隐藏状态,c_t包含的是句子的最后一个单词的细胞状态,所以它们都与句子的长度seq_length无关。
output[-1]与h_t是相等的,因为output[-1]包含的正是batch_size个句子中每一个句子的最后一个单词的隐藏状态,注意LSTM中的隐藏状态其实就是输出,cell state细胞状态才是LSTM中一直隐藏的,记录着信息,这也就是博主本文想说的一个事情,output与h_t的关系。

代码验证

  • 暂略 …

至此,本文到此结束!
另外:博主在毕设完成后抽空会将复现的LSTM等代码公布至git上,核心算法会写到博文中,希望大家持续关注,多多提意见!
关于torch.nn.LSTM()的详解(维度,输入,输出)已全部完成,祝各位学业有成!
此博文只做学习用途,无任何商业用途!
大大怪爱小乖乖!
研哥哥

03-08
### LSTM 使用与实现 #### 在 PyTorch 中使用和实现 LSTM LSTM(Long Short-Term Memory)是一种特殊的循环神经网络结构,能够学习长时间依赖关系。PyTorch 提供了内置的 `nn.LSTM` 类来简化这一过程。 创建一个简单的 LSTM 模型可以如下所示: ```python import torch import torch.nn as nn class LSTMModel(nn.Module): def __init__(input_size, hidden_size, num_layers, output_size): super(LSTMModel, self).__init__() # 定义 LSTMlstm_layer = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, batch_first=True) # 输出层 linear_layer = nn.Linear(hidden_size, output_size) def forward(x): out, _ = lstm_layer(x) out = linear_layer(out[:, -1, :]) return out ``` 上述代码定义了一个基本的 LSTM 模型[^1]。该模型接收输入序列并返回最后一个时间步的结果作为预测输出。 为了训练这个模型,通常会遵循以下模式: ```python model = LSTMModel(input_size=..., hidden_size=..., num_layers=..., output_size=...) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) for epoch in range(num_epochs): model.train() outputs = model(inputs) optimizer.zero_grad() loss = criterion(outputs, labels) loss.backward() optimizer.step() ``` 这段脚本展示了如何设置损失函数、优化器以及执行前向传播、反向传播的过程。 #### 在 TensorFlow 中使用和实现 LSTM TensorFlow 同样支持构建基于 LSTM 的神经网络。下面是一个利用 Keras API 实现的例子: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding, LSTM, Dense model = Sequential([ Embedding(vocab_size, embedding_dim), LSTM(units=lstm_units, dropout=dropout_rate), Dense(output_size, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit(train_data, train_labels, epochs=num_epochs, validation_split=val_ratio) ``` 此段代码片段说明了怎样通过调用 Keras 接口快速搭建起带有嵌入层(embedding layer) 和全连接层(fully connected layer)LSTM 网络架构,并完成编译配置及拟合操作[^2]。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值