本文简要介绍python语言中 torch.nn.LSTM
的用法。
用法:
class torch.nn.LSTM(*args, **kwargs)
input_size-输入
x
中的预期特征数hidden_size-隐藏状态的特征数
h
num_layers-循环层数。例如,设置
num_layers=2
意味着将两个 LSTM 堆叠在一起以形成stacked LSTM
,第二个 LSTM 接收第一个 LSTM 的输出并计算最终结果。默认值:1bias-如果
False
,则该层不使用偏置权重b_ih
和b_hh
。默认值:True
batch_first-如果
True
,则输入和输出张量提供为(batch, seq, feature)
而不是(seq, batch, feature)
。请注意,这不适用于隐藏或单元状态。有关详细信息,请参阅下面的输入/输出部分。默认值:False
dropout-如果非零,则在除最后一层之外的每个 LSTM 层的输出上引入
Dropout
层,丢弃概率等于dropout
。默认值:0bidirectional-如果
True
,则成为双向 LSTM。默认值:False
proj_size-如果
> 0
,将使用具有相应大小的投影的 LSTM。默认值:0
~LSTM.weight_ih_l[k]-
(W_ii|W_if|W_ig|W_io)
的可学习 input-hidden 权重,形状为(4*hidden_size, input_size)
用于k = 0
。否则,形状为(4*hidden_size, num_directions * hidden_size)
。如果指定了proj_size > 0
,则形状将为(4*hidden_size, num_directions * proj_size)
fork > 0
层~LSTM.weight_hh_l[k]-
(W_hi|W_hf|W_hg|W_ho)
的可学习 hidden-hidden 权重,形状为(4*hidden_size, hidden_size)
。如果指定了proj_size > 0
,则形状将为(4*hidden_size, proj_size)
。 层~LSTM.bias_ih_l[k]-
(b_ii|b_if|b_ig|b_io)
的可学习 input-hidden 偏差,形状为(4*hidden_size)
层~LSTM.bias_hh_l[k]-
(b_hi|b_hf|b_hg|b_ho)
的可学习 hidden-hidden 偏差,形状为(4*hidden_size)
层~LSTM.weight_hr_l[k]-形状为
(proj_size, hidden_size)
的 层的可学习投影权重。仅在指定proj_size > 0
时出现。~LSTM.weight_ih_l[k]_reverse-类似于
weight_ih_l[k]
的反向。仅在bidirectional=True
时出现。~LSTM.weight_hh_l[k]_reverse-类似于
weight_hh_l[k]
的反向。仅在bidirectional=True
时出现。~LSTM.bias_ih_l[k]_reverse-类似于
bias_ih_l[k]
的反向。仅在bidirectional=True
时出现。~LSTM.bias_hh_l[k]_reverse-类似于
bias_hh_l[k]
的反向。仅在bidirectional=True
时出现。~LSTM.weight_hr_l[k]_reverse-类似于
weight_hr_l[k]
的反向。仅在指定bidirectional=True
和proj_size > 0
时出现。
将多层长短期 memory (LSTM) RNN 应用于输入序列。
对于输入序列中的每个元素,每一层计算以下函数:
其中
t
的隐藏状态, 是时间t
的单元状态, 是时间t
的输入, 是层的隐藏状态时间t-1
或初始隐藏状态0
和 、 、 、 分别是输入、遗忘、单元和输出门。 是 sigmoid 函数, 是 Hadamard 积。 是时间在多层 LSTM 中,第
dropout
。 层( )的输入 是前一层的隐藏状态 乘以 dropout ,其中每个 是伯努利随机变量这是 概率为如果指定
proj_size > 0
,将使用带有投影的 LSTM。这会以下列方式更改 LSTM 单元。首先, 的尺寸将从hidden_size
更改为proj_size
( 的尺寸将相应更改)。其次,每一层的输出隐藏状态将乘以一个可学习的投影矩阵: 。请注意,因此,LSTM 网络的输出也将具有不同的形状。有关所有变量的确切尺寸,请参阅下面的输入/输出部分。您可以在 https://arxiv.org/abs/1402.1128 中找到更多详细信息。- 输入:输入,(h_0,c_0)
input: 形状张量
当batch_first=False
或者 当batch_first=True
包含输入序列的特征。输入也可以是打包的可变长度序列。看torch.nn.utils.rnn.pack_padded_sequence()
或者torch.nn.utils.rnn.pack_sequence详情。h_0: 形状张量
包含批次中每个元素的初始隐藏状态。如果 (h_0, c_0) 未提供,则默认为零。c_0: 形状张量
包含批次中每个元素的初始单元状态。如果 (h_0, c_0) 未提供,则默认为零。
其中:
- 输出:输出,(h_n,c_n)
output: 形状张量
当batch_first=False
或者 当batch_first=True
包含输出特征(h_t)
从 LSTM 的最后一层,对于每个t
.如果一个torch.nn.utils.rnn.PackedSequence
已作为输入给出,输出也将是一个打包序列。h_n: 形状张量
包含批次中每个元素的最终隐藏状态。c_n: 形状张量
包含批次中每个元素的最终单元状态。
注意
所有的权重和偏差都是从 初始化的,其中
注意
对于双向 LSTM,向前和向后分别是方向 0 和 1。
batch_first=False
:output.view(seq_len, batch, num_directions, hidden_size)
时拆分输出层的示例。警告
在某些版本的 cuDNN 和 CUDA 上,RNN 函数存在已知的不确定性问题。您可以通过设置以下环境变量来强制执行确定性行为:
在 CUDA 10.1 上,设置环境变量
CUDA_LAUNCH_BLOCKING=1
。这可能会影响性能。在 CUDA 10.2 或更高版本上,设置环境变量(注意前导冒号)
CUBLAS_WORKSPACE_CONFIG=:16:8
或CUBLAS_WORKSPACE_CONFIG=:4096:2
。有关详细信息,请参阅cuDNN 8 Release Notes。
- 孤儿
注意
如果满足以下条件:1) cudnn 已启用,2) 输入数据在 GPU 上 3) 输入数据具有 dtype
torch.float16
4) 使用 V100 GPU,5) 输入数据不是PackedSequence
格式的持久化算法可以选择以提高性能。例子:
>>> rnn = nn.LSTM(10, 20, 2) >>> input = torch.randn(5, 3, 10) >>> h0 = torch.randn(2, 3, 20) >>> c0 = torch.randn(2, 3, 20) >>> output, (hn, cn) = rnn(input, (h0, c0))
参数:
变量:
相关用法
- Python PyTorch LSTM用法及代码示例
- Python PyTorch LSTMCell用法及代码示例
- Python PyTorch LazyModuleMixin用法及代码示例
- Python PyTorch LinearLR用法及代码示例
- Python PyTorch LKJCholesky用法及代码示例
- Python PyTorch L1Loss用法及代码示例
- Python PyTorch LPPool2d用法及代码示例
- Python PyTorch LeakyReLU用法及代码示例
- Python PyTorch LogSigmoid用法及代码示例
- Python PyTorch LowRankMixtureCrossNet用法及代码示例
- Python PyTorch LayerNorm用法及代码示例
- Python PyTorch LineReader用法及代码示例
- Python PyTorch LogNormal用法及代码示例
- Python PyTorch LambdaLR用法及代码示例
- Python PyTorch LocalResponseNorm用法及代码示例
- Python PyTorch LowRankMultivariateNormal用法及代码示例
- Python PyTorch Linear用法及代码示例
- Python torchrec.modules.crossnet.LowRankCrossNet用法及代码示例
- Python PyTorch LogSoftmax用法及代码示例
- Python PyTorch LocalElasticAgent用法及代码示例
- Python PyTorch LPPool1d用法及代码示例
- Python PyTorch Laplace用法及代码示例
- Python PyTorch LazyModuleExtensionMixin.apply用法及代码示例
- Python PyTorch LinearReLU用法及代码示例
- Python PyTorch frexp用法及代码示例
注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.LSTM。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。