2017-06-27 42 views
1

enter image description hereKeras/TF:時間分佈CNN + LSTM從視覺上識別

我想實現從文章(https://arxiv.org/abs/1411.4389)模型基本上由時間分佈細胞神經網絡,隨後使用Keras與LSTMs的序列TF。

但是,我有一個問題,試圖找出我是否應該包含TimeDirstibuted函數僅用於我的Convolutional & Pooling圖層還是也用於LSTMs?

有沒有一種方法可以並行運行CNN圖層(基於我想要處理的序列中的幀數並基於我擁有的核心數量)?

最後,假設每個條目由「n」個幀(按順序)組成,其中n根據當前數據條目而變化,什麼是最適合的輸入維度?並且「n」是批量大小?有沒有辦法將//中的CNN數量限制爲例如4(以便在處理4個幀後獲得輸出Y)?

PS:輸入是小視頻(即幀序列)

PS:輸出尺寸無關,我的問題,所以這裏不討論

謝謝

回答

-1

[編輯]
對不起,只有一個鏈接回答不好。所以我試着一個接一個地回答問題。

如果我應該包含TimeDirstibuted函數僅用於我的Convolutional &池圖層還是還用於LSTM?

僅對Conv和Pooling層使用TimeDistributed函數,不需要LSTM。

有沒有辦法同時運行CNN圖層?

不,如果您使用CPU。如果你使用GPU,這是可能的。
Transparent Multi-GPU Training on TensorFlow with Keras

什麼是最適合的輸入尺寸?

五。 (批次,時間,寬度,高度,通道)。

有沒有一種辦法細胞神經網絡的//數量限制爲例如4

您可以通過手動對齊幀做到這一點的預處理到特定的號碼,網絡不在家。換句話說,如果在處理完4幀後想要輸出,則「時間」維度應該爲4。

model = Sequential() 

model.add(
    TimeDistributed(
     Conv2D(64, (3, 3), activation='relu'), 
     input_shape=(data.num_frames, data.width, data.height, 1) 
    ) 
) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(1, 1)))) 

model.add(TimeDistributed(Conv2D(128, (4,4), activation='relu'))) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2)))) 

model.add(TimeDistributed(Conv2D(256, (4,4), activation='relu'))) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2)))) 

# extract features and dropout 
model.add(TimeDistributed(Flatten())) 
model.add(Dropout(0.5)) 

# input to LSTM 
model.add(LSTM(256, return_sequences=False, dropout=0.5)) 

# classifier with sigmoid activation for multilabel 
model.add(Dense(data.num_classes, activation='sigmoid')) 

參考:
PRI-MATRIX FACTORIZATION - BENCHMARK