Keras LSTM在LSTM层之前具有嵌入层

时间:2017-11-10 06:50:53

标签: python keras lstm word-embedding

我正在尝试keras IMDB数据的示例,数据形状如下:

  

x_train形状:(25000,80)

我只是将keras示例的原始代码更改为以下代码:

model = Sequential()
layer1 = Embedding(max_features, 128)
layer2 = LSTM(128, dropout = 0.2, recurrent_dropout = 0.2, return_sequences = True)
layer3 = Dense(1, activation = 'sigmoid')
model.add(layer1)
model.add(layer2)
model.add(layer3)

原始模型将return_sequences设置为False,我将其更改为True,我遇到了此错误:

  

期望dense_1具有3个维度,但是具有形状的阵列(25000,1)

但我打印了模型的结构,发现LSTM图层的输出正是一个3D张量:

  

lstm_1(LSTM):(无,无,128)

2 个答案:

答案 0 :(得分:0)

您需要重塑训练阵列,使用以下代码:

x_train = np.reshape(x_train,(x_train.shape[0],1,x_train.shape[1]))

您的测试阵列:

x_test = np.reshape(x_test,(x_test.shape[0],1,x_test.shape[1]))

仅供参考:np是numpy pacakge。

LSTM模型中的时间步长:https://machinelearningmastery.com/use-timesteps-lstm-networks-time-series-forecasting/

时间步:这相当于您运行复现神经网络的时间步长。如果您希望您的网络具有60个字符的内存,则此数字应为60。

答案 1 :(得分:0)

我认为在LSTM之后你需要一个TimeDistributed层,其中return_sequences = True

layer2= LSTM(128, dropout=0.2, 
             recurrent_dropout=0.2,return_sequences=True)
layer3= TimeDistributed(Dense(1, activation='sigmoid')))