2017-03-16 85 views
0

我想從以下圖Keras構建CNN具有可變輸入大小

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/

+0

看看這篇文章 - https://richliao.github.io/supervised/classification/2016/11/26/textclassifier-convolutional/ –

回答

1

你並不需要使用可變輸入尺寸,你只需要用零填充你的輸入(確保掩蓋這些零)。您可以將輸入大小定義爲一個非常大的輸入大小,並填充每個句子長度和輸入大小之間的差異。

在Keras中有一個內置函數,你可以在Sequence Preprocessing找到它,函數是「pad_sequences」。通過使用Masking class屏蔽這些值,確保您的模型知道填充值。

您可以看到一個實施例here