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

将多层长短时存储器(LSTM)RNN应用于输入序列。
对于输入序列中的每个元素,每个层计算以下函数:

TorchVision官方文档翻译为中文-LSTM-006_默认值


其中TorchVision官方文档翻译为中文-LSTM-006_默认值_02是时间t的隐藏状态,TorchVision官方文档翻译为中文-LSTM-006_深度学习_03是时间t的单元状态,TorchVision官方文档翻译为中文-LSTM-006_权重_04是时间t的输入,TorchVision官方文档翻译为中文-LSTM-006_pytorch_05是时间t-1的层的隐藏状态或时间o的初始隐藏状态,TorchVision官方文档翻译为中文-LSTM-006_深度学习_06分别是输入门、遗忘门、单元门和输出门TorchVision官方文档翻译为中文-LSTM-006_pytorch_07是sigmoid函数,并且TorchVision官方文档翻译为中文-LSTM-006_默认值_08是Hadamard product。

在多层LSTM中,第TorchVision官方文档翻译为中文-LSTM-006_权重_09层的输入TorchVision官方文档翻译为中文-LSTM-006_pytorch_10是隐藏状态TorchVision官方文档翻译为中文-LSTM-006_权重_11的前一层的值乘以TorchVision官方文档翻译为中文-LSTM-006_默认值_12,其中每个TorchVision官方文档翻译为中文-LSTM-006_pytorch_13 是一个伯努利随机变量,dropout的概率为0。
如果proj_size>0被确定,则将使用带投影的LSTM。这将按以下方式更改LSTM单元格。首先,TorchVision官方文档翻译为中文-LSTM-006_lstm_14的维数将从hidden_size更改为proj_size(TorchVision官方文档翻译为中文-LSTM-006_深度学习_15的尺寸
将相应地进行更改)。其次,每个层的输出隐藏状态将乘以一个可学习的投影矩阵:TorchVision官方文档翻译为中文-LSTM-006_权重_16. 注意(因此,LSTM网络的输出也将具有不同的形状)。有关所有变量的精确尺寸,请参见下面的输入/输出部分。

参数
input_size–输入x中的预期特征数
hidden_size–处于隐藏状态h的要素数量
num_layers–重复出现的层数。例如,设置num_layers=2意味着将两个LSTM堆叠在一起形成一个堆叠LSTM,第二个LSTM接收第一个LSTM的输出并计算最终结果。默认值:1
bias–如果为False,则层不使用偏差权重b_ih和b_hh。默认值:True
batch_first–如果为True,则输入和输出张量将作为(batch,seq,feature)而不是(seq,batch,feature)提供。请注意,这不适用于隐藏或单元状态。有关详细信息,请参见下面的输入/输出部分。默认值:False
dropout–如果非零,则在每个LSTM层(最后一层除外)的输出上引入dropout层,dropout概率等于dropout。默认值:0
bidirectionl–如果为True,则变为双向LSTM。默认值:False
proj_size–如果大于0,将使用具有相应大小投影的LSTM。默认值:0

Inputs: input, (h_0, c_0)
input:当batch_first=False时,形状张量为TorchVision官方文档翻译为中文-LSTM-006_lstm_17或当batch_first=True时形状张量为TorchVision官方文档翻译为中文-LSTM-006_权重_18包含输入序列的特征。输入也可以是压缩可变长度序列。有关详细信息,请参见torch.nn.utils.rnn.pack_padded_sequence()或torch.nn.utils.rnn.pack_sequence()
h_0:形状张量TorchVision官方文档翻译为中文-LSTM-006_默认值_19包含批处理中每个元素的初始隐藏状态。如果未提供(h_0,c_0),则默认为零。
c_0:形状张量TorchVision官方文档翻译为中文-LSTM-006_pytorch_20包含批处理中每个元素的初始单元格状态。如果未提供(h_0,c_0),则默认为零。
其中
N=batch_size
L=序列长度
D = 2 if bidirectional = True 否则 1
TorchVision官方文档翻译为中文-LSTM-006_深度学习_21 = input_size
TorchVision官方文档翻译为中文-LSTM-006_权重_22=hidden_size
TorchVision官方文档翻译为中文-LSTM-006_pytorch_23

Outputs: output, (h_n, c_n)
output:当batch_first=False 形状张量TorchVision官方文档翻译为中文-LSTM-006_深度学习_24, 当batch_first=True时,包含LSTM最后一层的输出特征(h_t),用于每个t。如果torch.nn.utils.rnn.PACKEDSSEQUENCE作为输入,则输出也将是压缩序列。
h_n:形状张量TorchVision官方文档翻译为中文-LSTM-006_默认值_19包含批次中每个元素的最终单元格状态。
c_n:形状张量TorchVision官方文档翻译为中文-LSTM-006_pytorch_20包含批次中每个元素的最终单元格状态。

变量
~LSTM.weight_ih_l[k]TorchVision官方文档翻译为中文-LSTM-006_默认值_27层的可学习输入隐藏权重TorchVision官方文档翻译为中文-LSTM-006_深度学习_28,形状(4隐藏大小,输入大小)为k=0。否则,形状为(4隐藏大小,num_directionshidden_size)
~LSTM.weight_hh_l[k]TorchVision官方文档翻译为中文-LSTM-006_pytorch_29层的可学习隐藏权重TorchVision官方文档翻译为中文-LSTM-006_深度学习_30,形状(4
隐藏大小,隐藏大小)。如果ptoj_size>0被确定,则形状将为(4hidden_size,proj_size)。
~LSTM.bias_ih_l[k]TorchVision官方文档翻译为中文-LSTM-006_pytorch_29层的可学习输入隐藏偏差TorchVision官方文档翻译为中文-LSTM-006_权重_32,形状(4
隐藏大小)
~LSTM.bias_hh_l[k]-TorchVision官方文档翻译为中文-LSTM-006_默认值_27层的可学习隐藏偏差TorchVision官方文档翻译为中文-LSTM-006_lstm_34,形状(4*隐藏大小)
~LSTM.weight_hr_l[k]–TorchVision官方文档翻译为中文-LSTM-006_默认值_27层的可学习投影权重(proj_size, hidden_size)。仅在proj_size >0时出现。

注意
(1) 所有的权重和偏差的初始化都是从TorchVision官方文档翻译为中文-LSTM-006_权重_36其中TorchVision官方文档翻译为中文-LSTM-006_默认值_37
(2)对于双向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发行说明。

注意
如果满足以下条件:
1)启用cudnn,
2)输入数据位于GPU上
3)输入数据具有数据类型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))

更多计算机视觉与图形学相关资料,请关注微信公众号:计算机视觉与图形学实战

TorchVision官方文档翻译为中文-LSTM-006_pytorch_38