各データファイルの長さが異なる場合、入力フィーチャの形状をどのように決定しますか?


7

助けるために私はの利点と欠点を理解しdecision treesKNNNeural Networks、私は2クラス(中分類という単純な分類器構築したいBird SoundとはNon-Bird Sound)上記の3つの方法のすべてを使用します。そのため、kaggleからサウンドデータセットをダウンロードし、pysoundfileをサウンドファイルを読み取るためのモジュールとして探索してました。したがって、次のスタブ:

data, samplerate = sf.read('xc94652.flac')

numpy ndarrayを返します。shapeデータの各ファイル、いくつかのビーイングに応じて変化(8637686,)し、いくつかのビーイング(3227894,)。各ファイルは長さが異なるため、ファイルの形状はdataファイルごとに異なります。いくつかの方法があります、私は形をdata等しくすることができますか?すべてのファイルからデータセットの形状を最小の長さにすることを計画していました。しかし、それは間違いなくサウンドファイルデータセットを正当化しません。多くの機能が失われる可能性があり、最終的にモデルの精度が失われる可能性があります。

回答:


2

データ探索

データをもう少し詳しく調べることをお勧めします。これは、この鳥の鳴き声のデータセットに最適なアプローチを決定するのに役立つ可能性があります。

たとえば、各鳥のスペクトログラム(属の種類は66種類しかない)を見て、サンプルからより多くのデータを抽出する方法を確認します。これは、ここから取得したサンプルのスペクトログラムです

バードコールスペクトログラム

明らかに繰り返しパターンがあることがわかります!背の高い薄緑色のブロックが断続的に表示されています。だからサンプルは確かに70秒強の音ですが、鳥の鳴き声は実際には約2秒しか続かないようです!

単純なフィルタリングアルゴリズムを使用するか、これらのチャンクを見つけるためのモデルを構築することで、それらのチャンクを抽出し、チャンク間のギャップに関するデータとともに、それらのチャンクのみを処理できます。

これは、データ固有の前処理の一例にすぎません。情報密度を向上させる方法は他にもたくさんあると思います。

サンプルレート

これは、もう1つの自由度です。1つのアイデアは、モデルへの入力内で異なるサンプルレートを受け入れることです。サンプルレートを調整して、最終サンプルがすべて同じ長さになるようにします。

私のアイデアは、最短のサンプルの長さを使用してから、すべての長いサウンドスニペットの定期的なサンプリングを実行して、結果のスニペットがすべて最短のサンプルと同じ長さになるようにすることです。

この方法は明らかにデータの品質を(サンプル全体で不規則に)妥協しますが、開始サンプルレートが非常に高い場合は、それでうまくいく可能性があります。

見ていこの便利な記事(前処理)音の波には多くの方法を説明します。

2つのモデル

あなたの特定のケースでは、本当に2つの長さしかない場合:8637686そして3227894...サンプルの長さごとに1つずつ、2つのモデルを単純に作成することは可能かもしれません。それは間違いなく最適なソリューションではありません。ただし、同じモデルを使用でき、データの両方の部分を使用するためにパラメーターを変更するだけで済むため、非常に迅速な開発とモデルの反復が可能になります。

基本

長いサンプルを切り捨てるだけでなく(短い/最短のサンプルの長さに合わせてカットする)パディングを使用して、短いサンプルを最長のサンプルの長さに簡単に一致させることができます。

通常、これは、ベクトルの最後にゼロを追加するだけで行われます。また、最初と最後にゼロを追加して、各サンプルの中央に情報を配置することもできます。

Kerasを使用してニューラルネットワークを作成する場合は、最初にZeroPadding1dレイヤーを確認することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.