2017-02-19 133 views
2

EDITED为简明起见。Keras的第二层(但不是第一层)的输入形状错误LSTM

我想在

https://keras.io/layers/recurrent/

from keras.models import Sequential 
from keras.layers import LSTM 

建立一个LSTM模型,工作过的文档,例如下面三行代码(加注释)直接从文档的链接采取以上:

model = Sequential() 
model.add(LSTM(32, input_dim=64, input_length=10)) 

# for subsequent layers, not need to specify the input size: 
model.add(LSTM(16)) 

ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2

我得到上述执行第二model.add()语句后错误,但exposi前将模型添加到我的数据中,甚至编译它。

我在这里做错了什么?任何帮助深表感谢。 仅供参考我正在使用Keras 1.2.1。编辑:刚刚升级到目前的1.2.2,仍然有同样的问题。

回答

4

由于patyork回答此上github

“第二LSTM层是没有得到的3D输入,它预计(具有(的batch_size,时间步长,特征的形状)。这是因为该第一LSTM层具有(通过运算的默认值)return_sequences = False,这意味着它仅输出在时间t-1具有形状(batch_size,32)的最后一个特征集,或者不包括时间的两个维度。“

因此,为了提供如何使用堆栈LSTM实现多对一(return_sequences = False)序列分类的代码示例,请确保在中间层上使用return_sequences = True,例如thi S:

model = Sequential() 
model.add(LSTM(32, input_dim=64, input_length=10, return_sequences=True)) 
model.add(LSTM(24, return_sequences=True)) 
model.add(LSTM(16, return_sequences=True)) 
model.add(LSTM(1, return_sequences=False)) 

model.compile(optimizer = 'RMSprop', loss = 'categorical_crossentropy') 

(没有错误)