您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 在keras的LSTM中使用隐藏状态而不是输出

5b51 2022/1/14 8:23:32 python 字数 3677 阅读 604 来源 www.jb51.cc/python

我希望在 Yang et al.之前使用注意机制的实现.我找到了一个使用此注意机制 here的自定义层的工作实现.而不是使用我的LSTM的输出值: my_lstm = LSTM(128, input_shape=(a, b), return_sequences=True) my_lstm = AttentionWithContext()(my_lstm) out = Dense(2, activa

概述

my_lstm = LSTM(128,input_shape=(a,b),return_sequences=True)
my_lstm = AttentionWithContext()(my_lstm)
out = Dense(2,activation='softmax')(my_lstm)

我想使用LSTM的隐藏状态:

my_lstm = LSTM(128,return_state=True)
my_lstm = AttentionWithContext()(my_lstm)
out = Dense(2,activation='softmax')(my_lstm)

但我得到错误

TypeError: can only concatenate tuple (not “int”) to tuple

我尝试将它与return_sequences结合使用但到目前为止我尝试过的所有内容都失败了.如何修改返回的张量以便像返回的输出序列一样使用它?

谢谢!

return_sequences: Boolean. Whether to return the last output in the output sequence,or the full sequence.
return_state: Boolean. Whether to return the last state in addition to the output.

return_state上的文档特别令人困惑,因为它们暗示隐藏状态与输出不同,但它们是同一个.对于LSTM,这有点模糊,因为除了隐藏(输出)状态之外,还有单元状态.我们可以通过查看Keras代码中的LSTM步骤函数来确认这一点:

class LSTM(Recurrent):
    def step(...):
        ...
        return h,[h,c]

该步骤函数的返回类型是输出状态.因此我们可以看到隐藏状态h实际上是输出,对于状态,我们得到隐藏状态h和单元状态c.这就是为什么你可以互换地使用术语“隐藏”和“输出”看到你链接Wiki article.

看一下你把论文链接得更近一点,在我看来你最初的实现就是你想要的.

my_lstm = LSTM(128,activation='softmax')(my_lstm)

这会将每个时间步的隐藏状态传递给您的注意层.你运气不好的唯一情况是你真正希望将每个时间步的细胞状态传递到你的注意层(这是我最初的想法),但我认为这不是你想要的.您链接的纸张实际上使用GRU图层,该图层没有单元格状态的概念,并且其step函数也将隐藏状态作为输出返回.

class GRU(Recurrent):
    def step(...):
        ...
        return h,[h]

所以本文几乎肯定是指隐藏状态(也就是输出)而不是细胞状态.

总结

以上是编程之家为你收集整理的python – 在keras的LSTM中使用隐藏状态而不是输出全部内容,希望文章能够帮你解决python – 在keras的LSTM中使用隐藏状态而不是输出所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶