2016-11-06 10 views
1

私は現在、MFCC機能を抽出する目的で回帰ネットワークを試みています。ネットワークの入力はサンプリングされ、フレーム化されたオーディオファイルで、何か問題を抱えているように見えるか、一貫した出力が得られるようにします。入力としては機能しないので、一貫したフレームサイズを意味しますニューラルネットワーク。個別のオーディオファイル間で一貫したフレームサイズを確保するにはどうすればよいですか?

私は現在のような各オーディオファイルをサンプリングし、フレーミングしています:各オーディオ用のリストに追加され、各リスト内枠付きのオーディオファイルを持つ配列であることを意味

def load_sound_files(file_paths , data_input): 
    raw_sounds = [] 
    data_output = [] 
    for fp in file_paths: 
     y,sr = librosa.load(fp) 
     X = librosa.util.frame(y) 
     raw_sounds.append(X) 
    return raw_sounds 

[array([[frame],[frame],...,[frame]],dtype=float32), ...] 

私はこの

print raw_sounds[0].shape 
print raw_sounds[1].shape 

を印刷しようとした。この結果

(2048, 121) 
(2048, 96) 

を得ました。しかし、なぜ私はこの結果を取得していますか?私はフレーミングオプションに関して何も変更していないので、違いは何ですか?

一貫性を保つ方法がない場合、一貫性のない入力で、これを実行できるニューラルネットワークをどのように訓練しますか?

答えて

1

あなたの結果

(2048, 121) 
(2048, 96) 

は、フレーム長とフレームの数を示します。フレームサイズは実際には一貫して2048サンプル長です。両者の唯一の違いは、最初のサウンドファイルには121フレームあり、2番目のサウンドファイルには121フレームがあることです。

0

オーディオファイルには、異なる長さの配列です。

可変長入力に対処するための複数の方法があります。一般的に、一定の次元の入力をニューラルネットに複数回、各オーディオフレームごとに1回送ります。次に、ネットワークはRNN、LSTM、またはseq2seq(流入しているが、contrib/seq2seqにある)のようなアーキテクチャを使ってシーケンスから学習します。また、単純なDNN(フィードフォワード)アーキテクチャを使用することもできます。

関連する問題