Pytorch LSTM源码

1
2
3
4
5
class RNNBase(Module):
...
def __init__(self, mode, input_size, hidden_size,
num_layers=1, bias=True, batch_first=False,
dropout=0., bidirectional=False):

初始化函数参数含义

  • input_size – 输入数据的大小,即词向量维度或者股票数据自变量的维度,如最低价、最高价等。
  • hidden_size – 隐藏层的大小(即隐藏层节点数量)。
  • num_layers – LSTM层数量,默认等于1。
  • bias – 偏置。
  • batch_first – 为True时,batch_size处于第一维度(h_nc_n维度顺序不受影响),默认为False
  • dropout – 如果非0,就在除了最后一层的其它层都插入Dropout层,默认为0。
  • bidirectional – 为True时是双向LSTM,即BiLSTM,默认为False

输入数据格式

input(seq_len, batch_size, input_size)

  • seq_len/time_step –序列的长度 ,即句子的长度或单位数据的股票数据条数。
  • batch_size – 批次大小 ,即句子的条数或n个时间单位的股票数据。
  • input_size – 同初始化参数

h_0(num_layers * num_directions, batch_size, hidden_size)

  • num_layers * num_directions, 即LSTM的层数乘以方向数量。这个方向数量是由前面介绍的bidirectional决定,如果为False,则等于1;反之等于2。
  • batch_size:同上。
  • hidden_size: 隐藏层节点数。

c_0(num_layers * num_directions, batch_s。ize, hidden_size)

同h0。

输出数据格式

output(seq_len, batch_size, num_directions * hidden_size)

这个输出tensor包含了LSTM模型最后一层每个time step的输出特征。

h_n(num_layers * num_directions, batch_size, hidden_size)

只会输出最后个time step的隐状态结果。

c_n :(num_layers * num_directions, batch, hidden_size)

只会输出最后个time step的cell状态结果。

SjnTl

参考文章

理解Pytorch中LSTM的输入输出参数含义 - 知乎 (zhihu.com)

Pytorch的LSTM的理解 - 知乎 (zhihu.com)

deep learning - What’s the difference between “hidden” and “output” in PyTorch LSTM? - Stack Overflow