2016-01-07 51 views
5

我正在嘗試使用theano進行二進制LSTM分類。 我已經通過了示例代碼,但是我想構建自己的代碼。爲LSTM二進制分類構建語音數據集

我有一小組「你好」&「再見」錄音,我正在使用。我通過爲它們提取MFCC功能並將這些功能保存在文本文件中來預處理這些功能。我有20個語音文件(每個10個),我爲每個單詞生成一個文本文件,因此包含MFCC功能的20個文本文件。每個文件是一個13x56矩陣。

我現在的問題是:如何使用這個文本文件來訓練LSTM?

我對此比較陌生。我也瀏覽了一些關於它的文獻,但沒有發現真正理解這個概念。

任何使用LSTM的簡單方法也是受歡迎的。

回答

6

有許多現有的實施例如Tensorflow Implementation,Kaldi-focused implementation with all the scripts,最好先檢查它們。

Theano太低級別,您可以使用keras來代替,如tutorial中所述。您可以運行教程「按原樣」來了解事情進展情況。

然後,你需要準備一個數據集。您需要將數據轉換爲數據幀序列,並按順序爲每個數據幀分配一個輸出標籤。

Keras支持兩種類型的RNN--層返回序列和返回簡單值的圖層。您可以使用兩種方法進行試驗return_sequences=Truereturn_sequences=False

要使用序列進行訓練,您可以爲除了最後一個可以分配要識別的單詞的標籤的最後一個幀以外的所有幀分配虛擬標籤。您需要將輸入和輸出標籤放置到數組中。所以它會是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,...,1], [0,0,....,2]] 

在X中,每個元素都是一個13個浮點數的向量。在Y中,每個元素只是一個數字 - 0表示中間幀,最後一幀表示單詞ID。

要用標籤進行訓練,您需要將輸入和輸出標籤放置到數組中,並且輸出數組更簡單。因此,該數據將是:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,1], [0,1,0]] 

需要注意的是輸出矢量(np_utils.to_categorical)將其變成載體,而不僅僅是數量。

然後您創建網絡體系結構。你可以有13個浮點數輸入,一個矢量輸出。在中間你可能有一個完全連接的層,接着是一個lstm層。不要使用太多的圖層,從小的圖層開始。

然後,您將此數據集輸入到model.fit中,它將訓練您的模型。您可以在訓練結束後估算模型的質量。

由於您只有20個示例,因此您將遇到融合問題。你需要更多的示例,最好是數千個訓練LSTM,你只能使用非常小的模型。

+0

嘿,謝謝你的指導。你知道任何有100個問候和再見記錄的數據集嗎? –

+1

你可以在這裏下載一個隔離數字的數據庫:http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/speech%20recognition%20course.html,每個數字大約有200個樣本 –

+0

所以如果我是要將這種方法應用於數字(不是二進制),我們可以稱之爲語音識別? – udani