本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。