CLASS torch.nn.LSTM(*args, **kwargs)
将多层长短时存储器(LSTM)RNN应用于输入序列。
对于输入序列中的每个元素,每个层计算以下函数:
其中是时间t的隐藏状态,是时间t的单元状态,是时间t的输入,是时间t-1的层的隐藏状态或时间o的初始隐藏状态,分别是输入门、遗忘门、单元门和输出门是sigmoid函数,并且是Hadamard product。
在多层LSTM中,第层的输入是隐藏状态的前一层的值乘以,其中每个 是一个伯努利随机变量,dropout的概率为0。
如果proj_size>0被确定,则将使用带投影的LSTM。这将按以下方式更改LSTM单元格。首先,的维数将从hidden_size更改为proj_size(的尺寸
将相应地进行更改)。其次,每个层的输出隐藏状态将乘以一个可学习的投影矩阵:. 注意(因此,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。默认值:0Inputs: input, (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),则默认为零。
其中
N=batch_size
L=序列长度
D = 2 if bidirectional = True 否则 1
= input_size
=hidden_sizeOutputs: output, (h_n, c_n)
output:当batch_first=False 形状张量, 当batch_first=True时,包含LSTM最后一层的输出特征(h_t),用于每个t。如果torch.nn.utils.rnn.PACKEDSSEQUENCE作为输入,则输出也将是压缩序列。
h_n:形状张量包含批次中每个元素的最终单元格状态。
c_n:形状张量包含批次中每个元素的最终单元格状态。变量
~LSTM.weight_ih_l[k]–层的可学习输入隐藏权重,形状(4隐藏大小,输入大小)为k=0。否则,形状为(4隐藏大小,num_directionshidden_size)
~LSTM.weight_hh_l[k]–层的可学习隐藏权重,形状(4隐藏大小,隐藏大小)。如果ptoj_size>0被确定,则形状将为(4hidden_size,proj_size)。
~LSTM.bias_ih_l[k]–层的可学习输入隐藏偏差,形状(4隐藏大小)
~LSTM.bias_hh_l[k]-层的可学习隐藏偏差,形状(4*隐藏大小)
~LSTM.weight_hr_l[k]–层的可学习投影权重(proj_size, hidden_size)。仅在proj_size >0时出现。
注意
(1) 所有的权重和偏差的初始化都是从其中
(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格式可以选择持久化算法以提高性能。
式例
更多计算机视觉与图形学相关资料,请关注微信公众号:计算机视觉与图形学实战