pytorch LSTM中output和hidden关系

1.LSTM模型简介

LSTM模型
能点进来的相信大家也都清楚LSTM是个什么东西,我在这里就不加赘述了。具体介绍模型结构的也有不少。
如何简单的理解LSTM——其实没有那么复杂
人人都能看懂的LSTM

2.pytorch中的LSTM

这里附上一张pytorch官方文档的截图,h_n和c_n我都理解分别是上图中横向箭头中的下方箭头和上方的箭头,那output是干什么用的?在学习seq2seq时用的比较多基本上都是把encoder端的h_n和c_n输入的decoder端,output没怎么用过(听研究NER的同学说,他们用output不用h_n和c_n)。
pytorch官方文档
简单翻译一下就是output是每个时间t的h_t的集合,LSTM最后一层的输出特征h_t。

3.关于h和output之间的关系进行实验

output, (hn,cn) = self.lstm(packed_embedding)
print('output', output.size())
print('hn', hn.size())
# 输出
output   torch.Size([17, 1, 200])
h   torch.Size([2, 1, 100])

这时我想到一个问题既然output是所有的h_n,那最后一维output是不是就是h_n?但是这里因为我们用的是双向LSTM所以output的第三维是200,而h_n是100,但是h_n的第一维是2(2【双向】*1【一层】)。

那是不是output[-1,0,:10]就是h_n[0,0,:10]?这里取前10维进行观察

print('output  ', output[-1, 0, :10])
print("h_n", h_n[0, 0, :10])

在这里插入图片描述
再实验一下,反向h_n第一维取-1,output取第三维取后100维。

print('output', output[-1, 0, 100:110])
print("h_n", h_n[-1, 0, :10])

在这里插入图片描述
好像出了点问题,但是突然想到双向LSTM里反向部分的张量反向的最后一个t实际上是正向的第一个t,于是修改代码。

print('output', output[0, 0, 100:110])
print("h_n", h_n[-1, 0, :10])

在这里插入图片描述
嗯~这下就没啥问题了。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值