文本分类keras中卷积2D的尺寸误差
我的输入形状是一个10000x500文本文档。10000表示文档数,500表示字数 我试图做的是为kera的嵌入提供文本,然后是BLSTM,然后是Conv2D,然后是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
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