keras 中用于文本分类的 convolution2d 的尺寸误差
Dimension error for convolution2d in keras for text classification
我的输入形状是一个 10000x500 的文本文档。 10000代表文档数,500代表字数
我想做的是为kera的嵌入提供文本,然后是BLSTM,然后是Conv2D,然后是2Dpooling,展平,最后是一个完全连接的密集层。
架构图如下:
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)
嵌入的输出形状为 (None, 500, 100)
BLSTM 隐藏状态的输出形状为 (None, 500, 100)。
我想要一个 Conv2D 从 BLSTM 中提取隐藏层上的局部特征。但是,我遇到尺寸差异错误。
ValueError: Input 0 is incompatible with layer conv2d_8: expected ndim=4, found ndim=3
我已经尝试了这里的解决方案 When bulding a CNN, I am getting complaints from Keras that do not make sense to me. 但仍然出现错误。
您有两个选择:
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_dim=500
一起使用,并使用 MaxPooling1D
:
x = Conv1D(filters=128, kernel_size=3, input_shape=(100, 500))(x)
x = MaxPooling1D()(x)
x = Flatten()(x)
我的输入形状是一个 10000x500 的文本文档。 10000代表文档数,500代表字数
我想做的是为kera的嵌入提供文本,然后是BLSTM,然后是Conv2D,然后是2Dpooling,展平,最后是一个完全连接的密集层。
架构图如下:
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)
嵌入的输出形状为 (None, 500, 100) BLSTM 隐藏状态的输出形状为 (None, 500, 100)。 我想要一个 Conv2D 从 BLSTM 中提取隐藏层上的局部特征。但是,我遇到尺寸差异错误。
ValueError: Input 0 is incompatible with layer conv2d_8: expected ndim=4, found ndim=3
我已经尝试了这里的解决方案 When bulding a CNN, I am getting complaints from Keras that do not make sense to me. 但仍然出现错误。
您有两个选择:
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_dim=500
一起使用,并使用 MaxPooling1D
:
x = Conv1D(filters=128, kernel_size=3, input_shape=(100, 500))(x)
x = MaxPooling1D()(x)
x = Flatten()(x)