那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

手把手教你如何構建一個能夠識別歌曲類型的神經網絡

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-10-27 10:11 ? 次閱讀

本文手把手教你如何構建一個能夠識別歌曲類型的神經網絡

DataSet: 本文使用GTZAN Genre Collection音樂數據集,地址:[1]

這個數據集包含1000首不同的歌曲,分布在10種不同流派,每個流派100首,每首歌曲大約30秒。

使用的庫:Python庫librosa,用于從歌曲中提取特征,并使用梅爾頻率倒譜系數( Mel-frequency cepstral coefficients ,MFCC)。

MFCC數值模仿人類的聽覺,在語音識別和音樂類型檢測中有廣泛的應用。MFCC值將被直接輸入神經網絡。

了解MFCC

讓我們用兩個例子來說明MFCC。請通過Stereo Surgeon下載Kick Loop 5[2]和Whistling[3]。其中一個是低音鼓聲,另一個是高音口哨聲。它們明顯不同,你可以看到它們的MFCC數值是不同的。

讓我們轉到代碼(本文的所有代碼文件都可以在Github鏈接中找到)。

以下是你需要導入的內容列表:

librosalibrary

glob,你需要列出不同類型目錄中的文件

numpy

matplotlib,繪制MFCC graphs

Keras的序列模型,一種典型的前饋神經網絡

密集的神經網絡層,即有很多神經元的層。

例如,與卷積不同的是,它具有2D表示。你必須使用import activation,它允許你為每個神經元層提供一個激活函數,以及to_categorical,它允許你把類的名稱轉換成諸如搖滾(rock),迪斯科(disco)等等,稱為one-hot 編碼, 如下所示:

這樣,你已經正式開發了一個輔助函數來顯示MFCC的值

首先,加載歌曲,然后從中提取MFCC值。然后,使用specshow,這是librosa庫里的頻譜圖。

這是踏板鼓:

Low frequency: Kick loop5

可以看到,在低頻率下,低音是非常明顯的。沒有多少其他頻率被表示。但是,口哨聲的頻譜圖明顯有更高的頻率表示:

High frequency: Whistling

顏色越深或越接近紅色,在那個頻率范圍內的能量越大。

限定歌曲流派

你甚至可以看到口哨聲的頻率的變化。下面是是disco曲的頻率:

Song type/genre: Disco

下面是頻率輸出:

Disco Songs

你可以在前面的輸出中看到節拍,但由于它們只有30秒長,因此很難看到單個的節拍。將它與古典樂相比較,會發現古典音樂沒有那么多的節拍,而是有連續的低音線,比如下面是來自大提琴的低音線:

Song genre: Classical

下面是嘻哈音樂(hip-hop)的頻率:

Song genre:HipHop

HipHop songs

它看起來有點像disco,分辨它們之間的細微區別是神經網絡的問題。

這里還有另一個輔助函數,它只加載MFCC值,但這次你是正在為神經網絡做準備:

同時加載的是歌曲的MFCC值,但由于這些值可能在-250到+150之間,它們對神經網絡沒有什么好處。你需要輸入接近-1到+1或0到1的值。

因此,需要計算出每首歌曲的最大值和絕對值。然后將所有值除以最大值。此外,歌曲的長度略有不同,因此只需要選擇25000個MFCC值。你必須非常確定你輸入神經網絡的東西的大小總是相同,因為只有那么多的輸入神經元,一旦搭建好網絡就無法改變了。

限定歌曲以獲得MFCC值和流派名稱

接下來,有一個名為generate _features_and_labels的函數,它將遍歷所有不同的流派,并遍歷數據集中的所有歌曲,然后生成MFCC值和流派名:

如上面的截圖所示,準備一個所有特征和標簽的列表。遍歷全部10種流派。對于每種流派,請查看該文件夾中的文件。'generes /'+ genre +'/ *。au'文件夾顯示數據集的組織方式。

處理這個文件夾時,每個文件會有100首歌曲; 你可以提取特征并將這些特征放在all_features.append(features)列表中。那首歌曲的流派名稱也需要列在一個列表中。因此,最終,所有features將包含1000個條目,所有標簽也將包含1000個條目。在所有feature的情況下,這1000個條目中的每一個都將有25000個條目。這是一個1000 x 25000矩陣。

對于目前的所有標簽,有一個1000 entry的列表,里面是藍調、古典、鄉村、迪斯科、嘻哈、爵士、金屬、流行、雷鬼和搖滾等等詞匯。這就成問題了,因為神經網絡不會預測單詞或預測字母。你需要給它一個one-hot編碼,這意味著這里的每個單詞都將被表示為十個二進制數。

藍調(blues)的情況下,它是1后面跟著9個0。

古典(classical)的情況是,是0后面跟著1,再跟著9個0。以此類推。首先,通過np.unique(all_labels, return_inverse=True) 命令將它們作為整數返回來計算所有唯一的名稱。然后,使用to_categorical,將這些整數轉換為one-hot編碼。

那么,返回的是1000x10維。因為有1000首歌曲,每個歌曲都有10個二進制數字來表示單熱編碼。然后,通過命令return np.stack(all_features)返回堆疊在一起的所有特征,onehot_labels到單個矩陣,以及one-hot矩陣。因此,調用上層函數并保存特征和標簽:

為了確保正確,請打印如下面的截圖所示的特性和標簽的形狀。特性是1000×25000,標簽是1000×10。現在,將數據集拆分為一個列并測試拆分。將80%的標記定義為training_split= 0.8,以執行拆分:

接下來,構建神經網絡:

你會得到一個序列神經網絡。第一層是100個神經元的dense layer。在第一層,你需要給出輸入尺寸或輸入形狀,在這個例子里,就是25000。

這表示每個示例有多少輸入值。25000將連接到第一層中的100。

第一層將對其輸入,權重和偏差項進行加權求和,然后運行relu激活函數。relu表示任何小于0的都會變成0,任何高于0的都是值本身。

然后,這100個將連接到另外10個,就是輸出層。之所以是10,是因為你已經完成了one-hot編碼并且在編碼中有10個二進制數。

代碼中使用的激活softmax告訴你取10的輸出并對它們進行規范化,使它們加起來為1。這樣,它們最終成為了概率。現在考慮10個中的得分最高或概率最高的作為預測。這將直接對應于最高數字位置。例如,如果它在位置4,那么它就是disco。

接下來,編譯模型,選擇Adam等優化器,并定義損失函數。由于你有多個輸出,你可能希望進行分類交叉熵和度量準確性,以便除了始終顯示的損失之外,還可以在評估期間看到準確度。但是,準確度更有意義。接下來,打印model.summary,它會告訴你有關層的詳細信息。它看起來是這樣的:

第一個100神經元的層的輸出形狀肯定是100個值,因為有100個神經元,而密集的第二層的輸出是10,因為有10個神經元。那么,為什么第一層有250萬個參數或權重?這是因為你有25000個輸入。

你有25000個輸入,每個輸入都會進入100個密集神經元中的一個。因此,也就是250萬個,然后加上100,因為100個個神經元中每個都有自己的bias term,它自身的偏差權重也需要學習。

你有大約250萬個參數或權重。接下來,運行擬合。這需要訓練輸入和訓練標簽,并獲取你想要的epochs數量。你想要10,所以在經過訓練的輸入上重復10次。它需要一個batch size來告訴你這個數字,在這種情況下,歌曲在更新權重之前要遍歷;并且validation_split是0.2,表示要接受20%的訓練輸入,將其拆分出來,實際上并沒有對其進行訓練,并用它來評估每個epoch之后它的表現如何。實際上從來沒有訓練驗證拆分,但驗證拆分可讓你隨時查看進度。

最后,因為你提前將訓練和測試分開了,所以對測試、測試數據進行評估,并打印出測試數據的損失和準確度。以下是訓練結果:

它邊運行邊打印,并始終打印損失和準確性。這是在訓練集本身,而不是驗證集上,所以這應該非常接近1.0。你可能不希望它接近1.0,因為這可能代表過擬合,但是如果你讓它持續足夠長時間,通常會在訓練集上達到1.0的精度,因為它會記住訓練集。

你真正關心的是驗證的準確度,這就需要使用測試集。測試集是以前從未見過的數據,至少不是用于訓練的數據。最終的準確性取決于你提前分離的測試數據。現在你的準確度大約為53%。這看起來比較低,但要知道有10種不同的流派。隨機猜測的準確率是10%,所以這比隨機猜測要好很多。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4779

    瀏覽量

    101163
  • 語音識別
    +關注

    關注

    38

    文章

    1742

    瀏覽量

    112922

原文標題:【干貨】用神經網絡識別歌曲流派(附代碼)

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    圖文教程:手把手教你焊接貼片元件

    圖文教程:手把手教你焊接貼片元件,首先來張全部焊接點的PCB圖
    發表于 04-01 11:03 ?3.6w次閱讀
    圖文教程:<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>焊接貼片元件

    基于labview的BP人工神經網絡曲線擬合小程序

    `點擊學習>>《龍哥手把手教你學LabVIEW視覺設計》視頻教程用LabVIEW實現的BP人工神經網絡曲線擬合,感謝LabVIEW的矩陣運算函數,程序流程較之文本型語言清晰很多。[hide] [/hide]`
    發表于 12-13 16:41

    手把手教你構建完整的工程

    手把手教你構建完整的工程
    發表于 08-03 09:54 ?33次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>完整的工程

    手把手教你寫批處理-批處理的介紹

    手把手教你寫批處理-批處理的介紹
    發表于 10-25 15:02 ?69次下載

    美女手把手教你如何裝機(中)

    美女手把手教你如何裝機(中) 再來是硬碟的部份,這款機殼還不錯,可以旋轉支架~
    發表于 01-27 11:14 ?1479次閱讀

    美女手把手教你如何裝機(下)

    美女手把手教你如何裝機(下) 接著下來就是今天的重頭戲,開核蘿!~
    發表于 01-27 11:16 ?2933次閱讀

    手把手教你學習FPGA—LED篇

    電子專業單片機相關知識學習教材資料——手把手教你學習FPGA—LED篇
    發表于 08-08 17:19 ?0次下載

    手把手教你學電子書制作

    手把手教你學電子書制作,可以自己DIY電子書
    發表于 09-13 11:26 ?0次下載

    手把手教你安裝Quartus II

    本章手把手把教你如何安裝 Quartus II 軟件 ,并將它激活 。此外 還有USB -Blaster下載器的驅動安裝步驟 。
    發表于 09-18 14:55 ?9次下載

    手把手教你在家搭建監控系統

    手把手教你在家搭建監控系統
    發表于 01-17 19:47 ?25次下載

    手把手教你做電子時鐘---前言

    手把手教你做彩鈴電子時鐘
    發表于 11-14 16:53 ?11次下載

    手把手教你如何開始DSP編程

    手把手教你如何開始DSP編程。
    發表于 04-09 11:54 ?12次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>如何開始DSP編程

    手把手教你學LabVIEW視覺設計

    手把手教你學LabVIEW視覺設計手把手教你學LabVIEW視覺設計手把手教你學LabVIEW視
    發表于 03-06 01:41 ?3182次閱讀

    手把手教你開關電源PCB排板

    手把手教你開關電源PCB排板(新型電源技術)-分享下開關電源PCB排板的基本要點及分析,以及例子講解。絕對的手把手
    發表于 09-18 12:27 ?58次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>開關電源PCB排板

    手把手教你學FPGA仿真

    電子發燒友網站提供《手把手教你學FPGA仿真.pdf》資料免費下載
    發表于 10-19 09:17 ?2次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>學FPGA仿真
    亲朋棋牌刷金币| 七胜百家乐娱乐平台| 百家乐官网庄家优势| 靖边县| 罗甸县| 澳门百家乐官网介绍| 在线百家乐官网| 投注平台网| 足球系统出租| 杰克棋牌是真的吗| 松滋市| 明升百家乐官网娱乐城| 大世界百家乐官网赌场娱乐网规则 | 真人百家乐官网游戏软件| 百家乐官网英皇娱乐城| 百家乐官网单机版游戏下载| 大世界百家乐官网娱乐平台| 艮山坤向 24山| 百家乐智能分析| 大发888娱乐城客户端迅雷下载| 鼎龙娱乐城开户| 皇冠赔率| 网上百家乐官网的技巧| 百家乐官网路有几家| 百家乐官网打鱼秘| 百家乐官网博彩吧| 百家乐纯数字玩法| 百家乐书| 百家乐赢钱打| 金域百家乐的玩法技巧和规则 | 百家乐园搏彩论坛| 百家乐是真人发牌吗| 大发888网页游戏| 砀山县| 百家乐官网baccarat| 百家乐棋牌官网| 宝龙百家乐的玩法技巧和规则 | 大发888娱乐城开户| 百家乐官网视频下载| 百家乐官网投注庄闲法| 百家乐最低压多少|