from:http://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/#recurrent-layers
class torch.nn.LSTM( args, * kwargs)[source]
將一個多層的 (LSTM) 應用到輸入序列。
對輸入序列的每個元素,LSTM的每層都會執行以下計算: $$ \begin{aligned} i_t &= sigmoid(W_{ii}x_t+b_{ii}+W_{hi}h_{t-1}+b_{hi}) \ f_t &= sigmoid(W_{if}x_t+b_{if}+W_{hf}h_{t-1}+b_{hf}) \ o_t &= sigmoid(W_{io}x_t+b_{io}+W_{ho}h_{t-1}+b_{ho})\ g_t &= tanh(W_{ig}x_t+b_{ig}+W_{hg}h_{t-1}+b_{hg})\ c_t &= f_tc_{t-1}+i_tg_t\ h_t &= o_t*tanh(c_t) \end{aligned} $$ $h_t$是時刻$t$的隱狀態,$c_t$是時刻$t$的細胞狀態,$x_t$是上一層的在時刻$t$的隱狀態或者是第一層在時刻$t$的輸入。$i_t, f_t, g_t, o_t$ 分別代表 輸入門,遺忘門,細胞和輸出門。
參數說明:
-
input_size – 輸入的特征維度
-
hidden_size – 隱狀態的特征維度
-
num_layers – 層數(和時序展開要區分開)
-
bias – 如果為
False,那么LSTM將不會使用$b_{ih},b_{hh}$,默認為True。 -
batch_first – 如果為
True,那么輸入和輸出Tensor的形狀為(batch, seq, feature) -
dropout – 如果非零的話,將會在
RNN的輸出上加個dropout,最后一層除外。 -
bidirectional – 如果為
True,將會變成一個雙向RNN,默認為False。
LSTM輸入: input, (h_0, c_0)
-
input (seq_len, batch, input_size): 包含輸入序列特征的
Tensor。也可以是packed variable,詳見 [pack_padded_sequence](#torch.nn.utils.rnn.pack_padded_sequence(input, lengths, batch_first=False[source]) -
h_0 (num_layers * num_directions, batch, hidden_size):保存着
batch中每個元素的初始化隱狀態的Tensor -
c_0 (num_layers * num_directions, batch, hidden_size): 保存着
batch中每個元素的初始化細胞狀態的Tensor
LSTM輸出 output, (h_n, c_n)
-
output (seq_len, batch, hidden_size * num_directions): 保存
RNN最后一層的輸出的Tensor。 如果輸入是torch.nn.utils.rnn.PackedSequence,那么輸出也是torch.nn.utils.rnn.PackedSequence。 -
h_n (num_layers * num_directions, batch, hidden_size):
Tensor,保存着RNN最后一個時間步的隱狀態。 -
c_n (num_layers * num_directions, batch, hidden_size):
Tensor,保存着RNN最后一個時間步的細胞狀態。
LSTM模型參數:
-
weight_ih_l[k] – 第
k層可學習的input-hidden權重($W_{ii}|W_{if}|W_{ig}|W_{io}$),形狀為(input_size x 4*hidden_size) -
weight_hh_l[k] – 第
k層可學習的hidden-hidden權重($W_{hi}|W_{hf}|W_{hg}|W_{ho}$),形狀為(hidden_size x 4*hidden_size)。 -
bias_ih_l[k] – 第
k層可學習的input-hidden偏置($b_{ii}|b_{if}|b_{ig}|b_{io}$),形狀為( 4*hidden_size) -
bias_hh_l[k] – 第
k層可學習的hidden-hidden偏置($b_{hi}|b_{hf}|b_{hg}|b_{ho}$),形狀為( 4*hidden_size)。
