そのため、約 200 曲 (曲あたり約 3 ~ 5 分) のセグメントの固定ベクトル表現を学習しようとしており、そのために LSTM ベースの Sequence-to-sequence Autoencoder を使用したいと考えていました。
次のように(librosaを使用して)オーディオを前処理しています:
- 私は最初に、曲ごとに (1500000,) - (2500000,) 前後の形状の生のオーディオ信号時系列を取得しています。
- 次に、各生の時系列をセグメントにスライスし、曲ごとに (512, 3000) - (512, 6000) の下位レベルのメル スペクトログラム マトリックスを取得します。これらの (512,) ベクトルのそれぞれは、曲の一部を表すため、「ミニ曲」と呼ぶことができます。
- これらすべての曲のミニ曲をすべて縦に積み重ねて、トレーニング データを作成します (これをXと呼びましょう)。X のサイズは (512, 600000) であることがわかります。最初の次元 (512) はウィンドウ サイズで、2 番目の次元 (600000) はデータセット内の「ミニソング」の総数です。
- つまり、X には約 600000 のミニソングがあります。X の各列は、長さ (512,) のミニソングを表します。
- これらの (512,) ミニソング ベクトルのそれぞれは、ミニソングごとに (50,) ベクトルにエンコードする必要があります。つまり、プロセスの最後には 600000 (50,) ベクトルになります。
- より標準的な用語では、それぞれの長さが 512 の 600000 個のトレーニング サンプルがあります。私の場合を除いて、長さ 512 のサンプルを一時的なプロパティを持つシーケンスとして扱いたいと思います。]
ここで例を読んで、それを私のユースケースに拡張しようとしていました。レイヤーのパラメーターtimesteps
とinput_dim
パラメーターを何に設定する必要があるのか 疑問に思っていました。Input
私はtimesteps = X.shape[0]
(この場合は512)とinput_dim = X.shape[1]
(600000)を設定しています。これは正しい方法ですか?
編集:上記の説明を追加しました。