LSTM 后跟平均池化 [英] LSTM Followed by Mean Pooling

查看:97
本文介绍了LSTM 后跟平均池化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是 Keras 1.0.我的问题与此相同(

以下代码不起作用:

sequence = Input(shape=(max_sent_len,), dtype='int32')嵌入 = 嵌入(vocab_size,word_embedding_size)(序列)lstm = LSTM(hidden_​​state_size, activation='sigmoid',inner_activation='hard_sigmoid', return_sequences=True)(embedded)池 = AveragePooling1D()(lstm)输出 = Dense(1, activation='sigmoid')(pool)

如果我不设置 return_sequences=True,当我调用 AveragePooling1D() 时会出现这个错误:

回溯(最近一次调用最后一次):文件<stdin>",第 1 行,在 <module> 中文件/PATH/keras/engine/topology.py",第 462 行,在 __call__ 中self.assert_input_compatibility(x)文件/PATH/keras/engine/topology.py",第 382 行,在 assert_input_compatibilitystr(K.ndim(x)))例外:('输入 0 与层 averagepooling1d_6 不兼容:预期 ndim=3','找到 ndim=2')

否则,当我调用 Dense() 时会出现此错误:

回溯(最近一次调用最后一次):文件<stdin>",第 1 行,在 <module> 中文件/PATH/keras/engine/topology.py",第 456 行,在 __call__ 中self.build(input_shapes[0])文件/fs/clip-arqat/mossaab/trec/liveqa/cmu/venv/lib/python2.7/site-packages/keras/layers/core.py",第512行,在构建中断言 len(input_shape) == 2断言错误

解决方案

添加 TimeDistributed(Dense(1)) 帮助:

sequence = Input(shape=(max_sent_len,), dtype='int32')嵌入 = 嵌入(vocab_size,word_embedding_size)(序列)lstm = LSTM(hidden_​​state_size, activation='sigmoid',inner_activation='hard_sigmoid', return_sequences=True)(embedded)分布式 = TimeDistributed(Dense(1))(lstm)pool = AveragePooling1D()(分布式)输出 = Dense(1, activation='sigmoid')(pool)

I'm using Keras 1.0. My problem is identical to this one (How to implement a Mean Pooling layer in Keras), but the answer there does not seem to be sufficient for me.

I want to implement this network:

The following code does not work:

sequence = Input(shape=(max_sent_len,), dtype='int32')
embedded = Embedding(vocab_size, word_embedding_size)(sequence)
lstm = LSTM(hidden_state_size, activation='sigmoid', inner_activation='hard_sigmoid', return_sequences=True)(embedded)
pool = AveragePooling1D()(lstm)
output = Dense(1, activation='sigmoid')(pool)

If I don't set return_sequences=True, I get this error when I call AveragePooling1D():

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/PATH/keras/engine/topology.py", line 462, in __call__
    self.assert_input_compatibility(x)
  File "/PATH/keras/engine/topology.py", line 382, in assert_input_compatibility
    str(K.ndim(x)))
Exception: ('Input 0 is incompatible with layer averagepooling1d_6: expected ndim=3', ' found ndim=2')

Otherwise, I get this error when I call Dense():

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/PATH/keras/engine/topology.py", line 456, in __call__
    self.build(input_shapes[0])
  File "/fs/clip-arqat/mossaab/trec/liveqa/cmu/venv/lib/python2.7/site-packages/keras/layers/core.py", line 512, in build
    assert len(input_shape) == 2
AssertionError

解决方案

Adding TimeDistributed(Dense(1)) helped:

sequence = Input(shape=(max_sent_len,), dtype='int32')
embedded = Embedding(vocab_size, word_embedding_size)(sequence)
lstm = LSTM(hidden_state_size, activation='sigmoid', inner_activation='hard_sigmoid', return_sequences=True)(embedded)
distributed = TimeDistributed(Dense(1))(lstm)
pool = AveragePooling1D()(distributed)
output = Dense(1, activation='sigmoid')(pool)

这篇关于LSTM 后跟平均池化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆