結構

2017-08-26 29 views
0

我有成千上萬的視頻,他們每個人包括固定幀數是35 我嘗試通過訓練LSTM模型進行分類的視頻。但我不確切知道人們如何保持視頻的順序結構並訓練LSTM模型。結構

所以我想要做的是;

  1. 閱讀來自數據集
  2. 視頻經由CNN獲得的視頻和提取特徵對於每個幀35幀
  3. 飼料那些35個特徵LSTM層 - 如何可以養活每個視頻(35幀)批量生產LSTM?

Keras中的fit功能被高度使用。然而我不知道我怎麼能保持影像的順序結構,而我在爲擬合函數的內存讀取所有數據。

rm.model.fit(X,y,batch_size=batch_size, validation_data=(X_test, y_test),verbose=1, epochs=100) 

可能有人請我解釋人們如何培養具有視頻LSTM模型(N幀數)

我希望我可以清楚地解釋一下。

在此先感謝

回答

1

documentation,我們可以看到,所有Keras復發層所期望的輸入形狀是:

(None, TimeSteps, DataDimension) 

在Keras形狀,None是你有實例的個數。

所以,在第一個簡單的方法,你必須有你的訓練數據形如:

(NumberOfVideos, NumberOfFrames, height * width * channels) 

而你的第一層(如果第一層是LSTM)應該使用:

LSTM(AnyNumberOfCells, input_shape=(NumberOfFrames, height * width * channels)) 

批量大小(實例的數量)當您創建的模型從來沒有考慮,只出現在你的訓練數據,這就是爲什麼Keras顯示None在消息該維度。


現在,這是一個非常簡單和直觀的方式開始,但實際上,沒有塑造這樣的訓練數據的義務,你可以嘗試各種方式,只要一個你保持對LSTM將您的數據定爲(BatchSize,TimeSteps,DataDimension)。一個很好的方式來做到這一點(在我看來),首先要做一些卷積來減少數據大小,然後再將它送入LSTM。尺寸「高度*寬度*通道」在LSTM層中一次處理可能太多了,並且可能會導致內存問題。

如果你有記憶問題。你可以學習「發電機」或Keras Sequences。這些將與方法fit_generator()一起使用。 Keras將首先使用發生器讀取有限數量的數據,並僅使用該數據進行訓練。但是,你將不得不讓這些發電機以相同的格式輸出東西(ASmallerNumberOfVideos, NumberOfFrames, height * width * channels)

現在,如果即使這樣你仍然有內存問題,你將不得不開始使用stateful=True層。

在這種情況下,「TimeSteps」可能會在不同的陣列中分開。訓練時,你的LSTM圖層不會認爲「這個例子已經完成」。您提供的下一批次將被視爲「繼續之前的序列」。

數據將形狀如(NumberOfVideos,ReducedNumberOfFrames, h*w)

在這種情況下,每次在訓練足夠的「ReducedNumberOfFrames」之後,每次完成序列時,都必須手動重置網絡狀態,使用.reset_states()

只要你在正確的點上保持良好的訓練和.reset_states()的控制權,你也可以通過像(ReducedNumberOfVideos,ReducedNumberOfFrames,h*w)這樣的訓練共軛這兩個想法。