2017-08-25 118 views
1

我有一個關於如何在Keras中一起工作的卷積層和LSTM層的問題。關於使用卷積層的輸出作爲LSTM的輸入

假設我正在使用CNN來確定圖像的特徵映射。在特定的卷積層之後,我有一個特徵映射,例如F,其維數是(H,W,C)。現在,我想使用此特徵映射的每一行,如[1 ::],[2 ::],.....作爲跟隨的LSTM層的輸入,但重複H次。

LSTM的輸出是(H,W)張量。

有沒有辦法做到這一點在keras與默認圖層?或者我需要實現一個自定義圖層?

感謝


我想在我的模型使用Timedistributed層,但它不工作。其實,我想要實現的是link的簡化版本。

在這裏,我只想使用LSTM掃描我的Conv2D輸出的每一行並標記它的每個像素。我的代碼是像以下:

input_img = Input(shape=(256,256,1)) 

# encoder 
x = Conv2D(filters=16, kernel_size=(5,5))(input_img) 
x = MaxPooling2D((2, 2), padding='same')(x) # 128x128 
x = Conv2D(filters=32, kernel_size=(3,3))(x) 
encoded = MaxPooling2D((2, 2), padding='same')(x) # 64x64 

# decoder 
x = Conv2D(filters=32, kernel_size=(3,3))(encoded) 
x = UpSampling2D((2, 2))(x) 
x = Conv2D(filters=16, kernel_size=(5,5))(x) 
x = UpSampling2D((2, 2))(x) 

# Using LSTM to produce final outputs 
decoded = TimeDistributed(LSTM(3, input_shape=(32, 16),return_sequences=True))(x) 

model = Model(input_img, decoded) 

但它看起來像我的模型不能收斂......

+0

請參閱下面的標題爲「Visual question answering model」的例子:https://keras.io/getting-started/functional-api-guide/,它可能是相關的。 –

回答

0

這似乎是一個通用矩陣操作。您只需要在特徵映射的第一維將矩陣拆分爲H矩陣,然後將它們中的每一個迭代地提供給LSTM層。您將獲得H 1 * W向量作爲LSTM的輸出,並將它們連接到第一維,然後您將獲得一個H * W輸出。

+0

是的,這確實是一個矩陣操縱。但我不確定我是否會在Keras中實現這個功能,是否需要創建一個圖層來執行此操作? –

+0

@simbabuffalo我沒有使用keras,但我認爲這是一個普遍的問題。我不明白爲什麼你需要另一個圖層來做這件事,因爲它不需要任何變形。 –