Keras用于构建具有可变输入大小的CNN

时间:2017-03-16 13:27:06

标签: nlp keras conv-neural-network

我想从下图中构建CNN

CNN

我认为每次句子可以有不同的长度,并且仍然可以构建它。

以下是我在网上发现但有点丢失的东西

ngram_filters = [2, 3, 4]
conv_filters = []

for n_gram in ngram_filters:
    conv_filters.append(Sequential())
    conv_filters[-1].add(Conv2D(1, 1, n_gram, 5))
    conv_filters[-1].add(MaxPooling2D(poolsize=(nb_tokens - n_gram + 1, 1)))
    conv_filters[-1].add(Flatten())

model = Sequential()
model.add(Merge(conv_filters, mode='concat'))

图片来自以下博客 - http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

1 个答案:

答案 0 :(得分:1)

您不需要使用可变输入大小,只需要用零填充输入(确保屏蔽这些零)。您可以将输入大小定义为非常大的输入大小,并填充每个句子长度和输入大小之间的差异。

Keras中有一个内置函数,您可以在Sequence Preprocessing找到它,函数是" pad_sequences"。通过使用Masking class屏蔽这些值,确保模型了解填充值。

您可以看到实施的示例here