1

因此,我試圖學習約200首歌曲(每首歌約3-5分鐘)的固定向量表示,並且想要使用基於LSTM的序列 - 爲它定序自動編碼器。用於音樂的LSTM自動編碼器-Keras [序列到序列]

我(使用librosa)如下預處理音頻:

  1. 我第一次只是在獲得原始音頻信號的時間序列形狀的周圍(1500000) - 每首歌曲(2500000)。
  2. 然後,我將每個原始時間序列切分爲多個片段,並獲得每首歌曲形狀(512,3000) - (512,6000)的低級mel頻譜圖矩陣。這些(512)個矢量中的每一個可以被稱爲'迷你歌曲',因爲它們代表歌曲的一部分。
  3. 我將所有這些歌曲的所有迷你歌曲垂直疊加在一起,以創建訓練數據(我們稱之爲X)。 X的大小爲(512,600,000),其中第一維(512)是窗口大小,第二維(600000)是數據集中「迷你歌曲」的總數。
  4. 也就是說,X中有大約60萬首迷你歌曲 - X中的每一列代表一段長度爲(512,)的迷你歌曲。
  5. 這些(512個)迷你歌曲向量中的每一個應該被編碼成每個迷你歌曲的(50)個向量,即,在過程結束時我們將具有600000(50)個向量。
  6. 在更標準的術語中,我有600000個訓練樣本,每個訓練樣本的長度均爲512. [將此視爲與圖像數據集類似 - 600000個圖像,每個長度爲784,其中圖像的分辨率爲32x32。除了在我的情況下,我想治療的512長度的樣本作爲具有時間屬性序列。]

我讀的例子here,並尋求擴大,對我的使用情況。我想知道Input層的參數timestepsinput_dim應該設置爲什麼。

我在設置timesteps = X.shape[0](即在這種情況下爲512)和input_dim = X.shape[1](即600000)。這是否是正確的方法?

編輯:添加上面的說明。

+0

我認爲時間步長應該設置爲時間關係捕捉的合理跨度的長度。另一方面,input_dim應設置爲序列中的變量數(如果音頻序列隨時間變化爲1-D,則設置爲1)。你的問題有何進展?分享代碼會更有助於澄清問題:) –

回答

0

您的輸入實際上是一維序列而不是二維圖像。 輸入張量將是(600000,512,1),並且您需要將input_dim設置爲1並將時間步長設置爲512. 形狀輸入不包含張量的第一維(即您的情況爲600000)。