2017-07-25 82 views
-1

我正在研究CNN模型,並希望在密集層之前添加新的分類特徵。我試圖將特徵連接到CNN層的平坦輸出,但看起來像Keras中的連接函數需要輸入張量而不是數組。我應該怎麼做呢?這裏是我到目前爲止已經試過代碼:我試圖使用串聯功能在Keras的密集層之前添加分類特徵?

model = Sequential() 
model.add(Conv2D(128, (6, 6), padding='same')) 
model.add(Activation('relu')) 
model.add(Conv2D(128, (6, 6))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 
model.add(Flatten()) 

,但它可以加入張量,哪裏是我的特點是形狀的numpy的陣列(1,3)。任何幫助,將不勝感激。

+3

歡迎SO。爲了讓其他人能夠幫助您,請參閱'如何創建最小,完整和可驗證的示例'https://stackoverflow.com/help/mcve – desertnaut

回答

1

您應該在實際模型的一側創建新模型。 這個第二個模型將會輸入你的numpy數組,並且什麼也不做。

然後你連接它們。

這樣的 - >

m1 = Sequential() 
m1.add(Conv2D(128, (6, 6), padding='same')) 
m1.add(Activation('relu')) 
m1.add(Conv2D(128, (6, 6))) 
m1.add(Activation('relu')) 
m1.add(MaxPooling2D(pool_size=(2, 2))) 
m1.add(Dropout(0.25)) 
m1.add(Flatten()) 

m2 = Sequential() 
m2.add(Input()) # Put needed infos to input your numpy array 
#Don't forget to flatten it if needed ? 

model = Sequential() 
model.add(Merge([m1,m2], mode='concat')) 
#Then add your final layer. 
#To train it, in place of the normal var X_train, you'll use [X_train,yournumpyarray] in model.train method 
+0

謝謝@Pusheen。我實際上在拼接過程中感到困惑(它只連接張量)並沒有意識到Input函數將數組更改爲張量。 – Nib

+0

沒問題,我前幾次有類似的問題。 如果沒關係,請不要猶豫,接受答案:) –