使用Keras构建LSTM模型

时间:2017-04-28 23:53:37

标签: neural-network keras lstm recurrent-neural-network

我正在尝试使用Keras,我正在尝试创建常规神经网络和LSTM神经网络,每个网络都有一个输入层(2000个输入),一个隐藏层(256个节点)和一个输出层(1个节点)。试图遵循Keras documentation中的指南,我就是这样做的:

常规神经网络:

model = Sequential()

model.add(Dense(2000, input_shape = (2000,), activation = 'sigmoid'))

model.add(Dense(256, activation = 'sigmoid'))

model.add(Dense(1, activation = 'sigmoid'))

长期短暂记忆:

model = Sequential() 

model.add(Embedding(2000, 256))

model.add(LSTM(256, activation = 'tanh', dropout = 0.2, recurrent_dropout = 0.2))

model.add(Dense(1, activation = 'sigmoid'))

如您所见,对于LSTM网络,我使用了嵌入层作为输入层。这有可能避免吗?我不太明白为什么人们想要使用Read the Keras文档中的嵌入层,但这是我能让LSTM网络正常工作的唯一方法..

然而,即使在评估中使用完全相同的数据,这两种网络模型的最终测试精度也有很大差异。例如,LSTM提供约60%的准确度,而常规网提供约90%。

这是由于使用了不同类型的图层,我可以使用密集图层作为输入图层,即使我接下来有LSTM图层吗?

目前,当我尝试在LSTM层之前使用密集层时,我收到错误:

  

ValueError:输入0与图层lstm_1不兼容:预期ndim = 3,找到ndim = 2

这就是我的尝试:

model = Sequential() 

model.add(Dense(2000, input_shape = (2000,), activation = 'sigmoid'))

model.add(LSTM(256, activation = 'tanh', dropout = 0.2, recurrent_dropout = 0.2))

model.add(Dense(1, activation = 'sigmoid'))

我真正想要实现的是一个非常简单的常规神经网络(非循环)模型,以及一个纯LSTM神经网络模型。一个输入层,一个隐藏层和一个输出层。两个模型都应具有相同数量的节点。

1 个答案:

答案 0 :(得分:1)

我碰巧处于相同的情况,我已经有张量,并且不想在LSTM之前使用嵌入层。我使用了@Daniel Moller的建议并使用了reshape图层。以下是我的工作模型的样子:

from keras.layers import LSTM, Dense
from keras.models import Sequential
model_ls = Sequential()
model_ls.add(Reshape((3,2500), input_shape = (50,50,3) ))
#LSTM requires three dimensions (batch, time_series info, samples)
model_ls.add(LSTM(128, return_sequences=True)) 
model_ls.add(LSTM(64))
model_ls.add(Dense(40, activation="relu", name="feat_x"))
model_ls.add(Dense(1, activation="tanh"))
model_ls.compile(optimizer="adadelta",loss= "binary_crossentropy", metrics=["acc"])
model_ls.summary()

以下是输出的结果:

Train on 201433 samples, validate on 67145 samples
Epoch 1/15
 - 23s - loss: 0.0252 - acc: 0.9981 - val_loss: 0.0260 - val_acc: 0.9980
Epoch 2/15
 - 23s - loss: 0.0252 - acc: 0.9981 - val_loss: 0.0260 - val_acc: 0.9980
........
Epoch 15/15
 - 23s - loss: 0.0250 - acc: 0.9981 - val_loss: 0.0257 - val_acc: 0.9980