データ探索
データをもう少し詳しく調べることをお勧めします。これは、この鳥の鳴き声のデータセットに最適なアプローチを決定するのに役立つ可能性があります。
たとえば、各鳥のスペクトログラム(属の種類は66種類しかない)を見て、サンプルからより多くのデータを抽出する方法を確認します。これは、ここから取得したサンプルのスペクトログラムです。
明らかに繰り返しパターンがあることがわかります!背の高い薄緑色のブロックが断続的に表示されています。だからサンプルは確かに70秒強の音ですが、鳥の鳴き声は実際には約2秒しか続かないようです!
単純なフィルタリングアルゴリズムを使用するか、これらのチャンクを見つけるためのモデルを構築することで、それらのチャンクを抽出し、チャンク間のギャップに関するデータとともに、それらのチャンクのみを処理できます。
これは、データ固有の前処理の一例にすぎません。情報密度を向上させる方法は他にもたくさんあると思います。
サンプルレート
これは、もう1つの自由度です。1つのアイデアは、モデルへの入力内で異なるサンプルレートを受け入れることです。サンプルレートを調整して、最終サンプルがすべて同じ長さになるようにします。
私のアイデアは、最短のサンプルの長さを使用してから、すべての長いサウンドスニペットの定期的なサンプリングを実行して、結果のスニペットがすべて最短のサンプルと同じ長さになるようにすることです。
この方法は明らかにデータの品質を(サンプル全体で不規則に)妥協しますが、開始サンプルレートが非常に高い場合は、それでうまくいく可能性があります。
見ていこの便利な記事(前処理)音の波には多くの方法を説明します。
2つのモデル
あなたの特定のケースでは、本当に2つの長さしかない場合:8637686
そして3227894
...サンプルの長さごとに1つずつ、2つのモデルを単純に作成することは可能かもしれません。それは間違いなく最適なソリューションではありません。ただし、同じモデルを使用でき、データの両方の部分を使用するためにパラメーターを変更するだけで済むため、非常に迅速な開発とモデルの反復が可能になります。
基本
長いサンプルを切り捨てるだけでなく(短い/最短のサンプルの長さに合わせてカットする)パディングを使用して、短いサンプルを最長のサンプルの長さに簡単に一致させることができます。
通常、これは、ベクトルの最後にゼロを追加するだけで行われます。また、最初と最後にゼロを追加して、各サンプルの中央に情報を配置することもできます。
Kerasを使用してニューラルネットワークを作成する場合は、最初にZeroPadding1dレイヤーを確認することをお勧めします。