LSTM 后接均值池化

我使用的是 Keras 1.0。我的问题与这个(如何在 Keras 中实现均值池化层)相同,但那里的答案对我来说似乎不够充分。

我想实现这个网络:enter image description here

以下代码不起作用:

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)

如果我不设置 return_sequences=True,当我调用 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')

否则,当我调用 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) == 2AssertionError

回答:

添加 TimeDistributed(Dense(1)) 起到了帮助:

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)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注