2017-09-04 35 views
2

我在keras(用於信號分類)一個CNN模型:獲取層的輸出作爲特徵向量(KERAS)

cnn = Sequential() 

    cnn.add(Conv1D(10,kernel_size=8,strides=4, padding="same",activation="relu",input_shape=(Dimension_of_input,1))) 
    cnn.add(MaxPooling1D(pool_size=3)) 

    cnn.add(Conv1D(10,kernel_size=8,strides=4, padding="same",activation="relu")) 
    cnn.add(MaxPooling1D(2)) 
    cnn.add(Flatten()) 

    cnn.add(Dense(2, activation="softmax")) 

使用方法 'model.summary()',I可以得到每層輸出的形狀。在我的模型中,最後一個最大合併圖層的輸出是(None,1,30),Flatten圖層的輸出是(None,30)。

對於每個火車和測試樣本:在作爲密集層的輸入給出之前,是否有可能在keras中將平坦層的輸出作爲具有30個特徵(數字)的特徵向量?

+1

是的,這是可能的。請參閱[this](https://stackoverflow.com/questions/41711190/keras-how-to-get-the-output-of-each-layer/41712013#41712013)回答。 – Matin

回答

1

選擇由最後一層:

last = cnn.layers[-1] 

然後創建一個使用一個新的模式:

inp = Input(shape=(Dimension_of_input,)) 
features = Model(inp, last) 

所以,

feature_vec = features.predict(x_train) 

給你壓平層的輸出作爲每個火車樣本的特徵向量