2017-07-26 114 views
1

我是keras的新手,我試圖對文檔進行卷積。每個文檔由形狀爲[40 * 4000]的矩陣表示(每個文檔有40個句子,每個句子有20個詞,因此文字嵌入尺寸爲200)。Keras {ValueError}:輸入0與圖層不兼容conv2d_2

我想要做的卷積超過3個字,這是我的代碼(不完全一樣,但你可以運行你的機器上的代碼):

import keras 
from keras.layers import Input, Embedding, Dense, merge, Conv2D 
from keras.layers.core import Reshape 

tokens_input = Input(name='input', shape=(40, 20), dtype='int32') 

x = Embedding(25000 + 1, 200, name="embedding")(tokens_input) 
x = Reshape((40, -1), 
      name="reshape")(x) 


cur_conv = Conv2D(20, kernel_size=(3*200, 1), 
       strides=(200, 1), padding='valid', activation='relu')(x) 

但我收到此錯誤信息:輸入0與圖層不兼容conv2d_1:預計ndim = 4,發現ndim = 3

回答

0

Conv2D圖層的輸入應具有形狀(樣本,通道,寬度,高度),並且嵌入的輸出爲3D,而不是4D應該。您應該定義如何將嵌入輸出解釋爲圖像,也許您應該添加通道尺寸並將其設置爲1.

+0

謝謝,我解決了這個問題,但是我讀了Conv2D的keras文檔,它說參數kernel_size指定2D卷積窗口(https://keras.io/layers/convolutional/)的**寬度和高度**,實際上,我認爲kernel_size指定**高度和寬度**,換句話說,行和列, 我對嗎? – Joey

+0

@Joey輸入形狀中指定的寬度和高度對應於輸入數據,而不是卷積濾鏡。你可以有一個比卷積濾波器大得多的圖像。 –

+0

也許我沒有說清楚。我的意思是Conv2D ** kernel_size **的參數,文檔說它指定了過濾器的寬度和高度**,但是我發現它指定了過濾器的高度和寬度**,換句話說,行和過濾器的列。 – Joey

相關問題