文本分类keras中卷积2D的尺寸误差

文本分类keras中卷积2D的尺寸误差,keras,nlp,lstm,rnn,convolutional-neural-network,Keras,Nlp,Lstm,Rnn,Convolutional Neural Network,我的输入形状是一个10000x500文本文档。10000表示文档数,500表示字数 我试图做的是为kera的嵌入提供文本,然后是BLSTM,然后是Conv2D,然后是2D池,扁平化,最后是完全连接的密集层 架构如下图所示: inp = Input(shape=(500,)) x = Embedding(max_features=10000, embed_size=100)(inp) x = Bidirectional(CuDNNLSTM(50, return_sequences=True))(x

我的输入形状是一个10000x500文本文档。10000表示文档数,500表示字数

我试图做的是为kera的嵌入提供文本,然后是BLSTM,然后是Conv2D,然后是2D池,扁平化,最后是完全连接的密集层

架构如下图所示:

inp = Input(shape=(500,))
x = Embedding(max_features=10000, embed_size=100)(inp)
x = Bidirectional(CuDNNLSTM(50, return_sequences=True))(x)
x = Conv2D(filters=128, kernel_size=(3, 3), input_shape=(100,500,1))(x)
x = MaxPooling2D()(x)
x = Flatten()(x)
x = Dense(1, activation="sigmoid")(x)
嵌入的输出形状将是(无、500、100) BLSTM隐藏状态的输出形状将是(None、500100)。 我想要一个Conv2D从BLSTM中提取隐藏层上的局部特征。然而,我有尺寸误差

ValueError: Input 0 is incompatible with layer conv2d_8: expected ndim=4, found ndim=3
我在这里尝试了一种解决方案,但仍然出现错误。

您有两种选择:

a) 通过向
x
添加维度,将
Conv2D
rows=100
cols=500
channels=1
一起使用:

x = Lambda(lambda t: t[..., None])(x)
x = Conv2D(filters=128, kernel_size=(3, 3), input_shape=(100,500,1))(x)
b) 将
Conv1D
steps=100
input\u dim=500
一起使用,并使用
maxpoolg1d

x = Conv1D(filters=128, kernel_size=3, input_shape=(100, 500))(x)
x = MaxPooling1D()(x)
x = Flatten()(x)

lambda函数实际上对形状做了什么?它在最后一个轴上增加了一个维度。它相当于轴=-1