該計畫建構了一個用於音樂生成的循環神經網路(RNN)。此模型經過訓練,可以學習 ABC 記譜法的原始樂譜中的模式,從而產生音樂。該資料集是從 kaggle 收集的,包含歌曲的 ABC 表示法。連結:https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile 資料集中的文字首先被向量化以建立數字表示以維護查找表。我們將使用一些範例序列來訓練具有確定序列長度的 RNN。還將有一個用於預測下一個字元的目標序列。這將使用批次方法來實現,該方法會將字元索引流轉換為所需大小的序列。我們創建的 RNN 模型將基於 LSTM 架構,並具有初始化器“glorot_uniform”和激活函數“sigmoid”,其中我們將使用狀態向量來維護有關連續字元之間的時間關係的資訊。然後,LSTM 的最終輸出被輸入到完全連接的密集層,在其中我們將輸出詞彙表中每個字元的 softmax,然後從此分佈中進行取樣以預測下一個字元。
第 1 層:嵌入層,將索引轉換為固定嵌入大小的密集向量
第 2 層:具有 rnn_units 個單元的 LSTM。
第 3 層:密集(全連接)層,將 LSTM 輸出轉換為詞彙量。
然後使用交叉熵損失(負對數似然損失)即稀疏_分類_交叉熵損失的形式來訓練 RNN 模型,因為它利用整數目標來執行分類分類任務。我們希望使用真實目標(標籤)和預測目標(邏輯)來計算損失。定義超參數用於設定和最佳化。 Adam優化器用作訓練操作的優化器。此模型經過 3000 次迭代訓練,批量大小為 10,序列長度為 100。為了產生音樂,模型遵循預測程序:
步驟 1:初始化「種子」起始字串和 RNN 狀態,並設定我們要產生的字元數。
步驟2:使用起始字串和RNN狀態來獲得下一個預測字元的機率分佈。
Step3:從多項分佈取樣,計算預測字元的索引。然後將該預測的字元用作模型的下一個輸入。
第 4 步:在每個時間步,更新後的 RNN 狀態都會回饋到模型中,以便模型在進行下一次預測時擁有更多上下文。預測下一個字元後,更新的 RNN 狀態再次反饋到模型中,這就是它學習資料中的序列依賴性的方式,因為它從先前的預測中獲取了更多資訊。
現在,模型使用使用者定義的「start_string」和「 Generation_length」來產生歌曲。