如何使RNN与CNN输入相同?

时间:2018-03-29 13:46:09

标签: python neural-network keras

我有一个带文字的工作cnn 我的X_train的形状是(39971,10000),y_train:(39971,4)

max_words = 10000

model = Sequential()
model.add(Dense(512, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
到目前为止,这是有效的。  而这就是我试图制作RNN的方式:

model = Sequential()
model.add(Embedding(max_words, 128))
model.add(LSTM(64, return_sequences=True, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(4, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我可以编译模型但是当我尝试使用我的训练数据运行model.fit时,我收到一个错误: ValueError:检查目标时出错:期望dense_42有3个维度,但是有阵列形状(39971,4) 这是什么意思?我怎么能解决这个问题?

正如this建议我可能需要添加input_shape,但我不确定具有什么值。

1 个答案:

答案 0 :(得分:2)

LSTM层当前正在返回完整序列,因此网络的输出具有形状Realm。我认为你只想使用最后一个LSTM输出。如果是这种情况,请设置(batch_size, nb_timesteps, 4)