7

theano を使用してバイナリ LSTM 分類を実行しようとしています。サンプル コードを確認しましたが、独自のコードを作成したいと考えています。

私が使用している「Hello」と「Goodbye」の録音の小さなセットがあります。これらの MFCC 機能を抽出し、これらの機能をテキスト ファイルに保存することで、これらを前処理します。20 個の音声ファイル (それぞれ 10 個) があり、単語ごとにテキスト ファイルを生成しているので、MFCC 機能を含む 20 個のテキスト ファイルがあります。各ファイルは 13x56 のマトリックスです。

私の問題は次のとおりです:このテキストファイルを使用してLSTMをトレーニングするにはどうすればよいですか?

私はこれに比較的慣れていません。私もそれに関するいくつかの文献を調べましたが、その概念を本当によく理解しているとは思いませんでした。

LSTM を使用する簡単な方法も歓迎します。

4

1 に答える 1

9

Tensorflow 実装すべてのスクリプトを含む Kaldi に焦点を当てた実装など、既存の実装が多数あります。最初にそれらを確認することをお勧めします。

Theano は低レベルすぎるため、チュートリアルで説明されているように、代わりにkerasを試すことができます。チュートリアルを「そのまま」実行して、状況を理解することができます。

次に、データセットを準備する必要があります。データを一連のデータ フレームに変換する必要があり、一連のデータ フレームごとに出力ラベルを割り当てる必要があります。

Keras は、シーケンスを返すレイヤーと単純な値を返すレイヤーの 2 種類の RNN をサポートします。return_sequences=True使用するコードで、または両方を試すことができます。return_sequences=False

シーケンスでトレーニングするには、認識したい単語のラベルを割り当てることができる最後のフレームを除くすべてのフレームにダミー ラベルを割り当てることができます。入力ラベルと出力ラベルを配列に配置する必要があります。したがって、次のようになります。

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

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

X では、すべての要素が 13 個の float のベクトルです。Y では、すべての要素は単なる数字です。中間フレームの場合は 0、最終フレームの場合はワード ID です。

ラベルだけでトレーニングするには、入力ラベルと出力ラベルを配列に配置する必要があり、出力配列はより簡単です。したがって、データは次のようになります。

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

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

出力はベクトル化 (np_utils.to_categorical) され、単なる数値ではなくベクトルに変換されることに注意してください。

次に、ネットワーク アーキテクチャを作成します。入力には 13 個の浮動小数点数、出力にはベクトルを使用できます。中間には、完全に接続された 1 つの層があり、その後に 1 つの lstm 層が続く場合があります。大きすぎるレイヤーを使用しないでください。小さなレイヤーから始めてください。

次に、このデータセットをフィードしmodel.fitて、モデルをトレーニングします。トレーニング後にホールドアウト セットのモデル品質を推定できます。

例が 20 個しかないため、収束に問題があります。LSTM をトレーニングするには、より多くの例、できれば数千の例が必要です。非常に小さなモデルしか使用できません。

于 2016-01-07T23:28:39.840 に答える