LSTM输入输出各参数

torch.nn.LSTM(*args, kwargs)**
参数
– input_size
– hidden_size
– num_layers
– bias
– batch_first
– dropout
– bidirectional

LSTM的输入 input, (h_0, c_0)
– input (seq_len, batch, input_size)
– h_0 (num_layers * num_directions, batch, hidden_size) # 初始的隐藏状态
– c_0 (num_layers * num_directions, batch, hidden_size) # 初始的单元状态,维度与h_0相同

LSTM的输出 output, (h_n, c_n)
– output (seq_len, batch, num_directions * hidden_size)#output保存了最后一层,每个time step的输出h
– h_n (num_layers * num_directions, batch, hidden_size) # 最后时刻的输出隐藏状态
– c_n (num_layers * num_directions, batch, hidden_size) # 最后时刻的输出单元状态,维度与h_n相同
先上结论:
1. output保存了最后一层,每个time step的输出h,如果是双向LSTM,每个time step的输出
   h = [h正向, h逆向] (同一个time step的正向和逆向的h连接起来)。
2. h_n保存了每一层,最后一个time step的输出h,如果是双向LSTM,单独保存前向和后向的
   最后一个time step的输出h。
3. c_n与h_n一致,只是它保存的是c的值。

下面单独分析三个输出
1. output是一个三维的张量,第一维表示序列长度,第二维表示一批的样本数(batch),
   第三维是 hidden_size(隐藏层大小) * num_directions , 代码中可以发现num_directions
   根据是“否为双向”取值为1或2

2. h_n是一个三维的张量,第一维是num_layers*num_directions,num_layers是我们定义的
 神经网络的层数,num_directions在上面介绍过,取值为1或2,表示是否为双向LSTM。第二维表示
 batch_size 第三维表示隐藏层的大小。

 举个例子,我们定义一个num_layers=3的双向LSTM,h_n第一个维度的大小就等于 6 (2*3),h_n[0]
表示第一层前向传播最后一个time step的输出,h_n[1]表示第一层后向传播最后一个time step的输出,
h_n[2]表示第二层前向传播最后一个time step的输出,h_n[3]表示第二层后向传播最后一个time step的输出,
h_n[4]和h_n[5]分别表示第三层前向和后向传播时最后一个time step的输出。

3. c_n与h_n的结构一样

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值