网易首页 > 网易号 > 正文 申请入驻

干货!用神经网络识别歌曲流派

0
分享至

本文手把手教你如何构建一个能够识别歌曲类型的神经网络。

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 loop 5

可以看到,在低频率下,低音是非常明显的。没有多少其他频率被表示。但是,口哨声的频谱图明显有更高的频率表示:

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%,所以这比随机猜测要好很多。

[1]marsyasweb.appspot.com/download/data_sets/.GTZAN Genre Collection

[2]https://freesound.org/people/Stereo Surgeon/sounds/266093/

[3]https://freesound.org/people/grrlrighter/sounds/98195/

原文:

https://medium.com/@navdeepsingh_2336/identifying-the-genre-of-a-song-with-neural-networks-851db89c42f0

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
陈小春晒俩儿子同框!6岁HoHo剪掉长发变帅小伙,一句话道尽兄弟情深

陈小春晒俩儿子同框!6岁HoHo剪掉长发变帅小伙,一句话道尽兄弟情深

今古深日报
2026-07-20 12:18:11
《功夫女足》票房井喷,诞生4个赢家2位输家,张艺兴热巴位列其中

《功夫女足》票房井喷,诞生4个赢家2位输家,张艺兴热巴位列其中

剧芒芒
2026-07-18 12:33:31
霍启山被传婚讯后,携女伴现身纽约看世界杯,网友:是娜然吗?

霍启山被传婚讯后,携女伴现身纽约看世界杯,网友:是娜然吗?

白面书誏
2026-07-20 15:27:09
俄莫斯科州州长:3名中国公民在无人机袭击中受伤

俄莫斯科州州长:3名中国公民在无人机袭击中受伤

界面新闻
2026-07-20 16:32:42
离婚早有预兆?香港男星官宣8年婚姻结束,这些细节早有迹可循

离婚早有预兆?香港男星官宣8年婚姻结束,这些细节早有迹可循

孤傲何妨初
2026-07-21 00:20:02
深圳地铁实现进站安检全覆盖,新规首日大排长龙,官方温馨提醒

深圳地铁实现进站安检全覆盖,新规首日大排长龙,官方温馨提醒

21世纪经济报道
2026-07-20 18:04:18
4天8亿被偷,周星驰只回了3个问号,比骂街还狠

4天8亿被偷,周星驰只回了3个问号,比骂街还狠

手工制作阿歼
2026-07-21 00:12:04
西方人实在想不通:四十度高温,十几亿中国人怎么敢全天开空调

西方人实在想不通:四十度高温,十几亿中国人怎么敢全天开空调

娱乐的硬糖吖
2026-07-20 00:01:46
新冠病毒又开始活跃了,三针科兴遭网友热议

新冠病毒又开始活跃了,三针科兴遭网友热议

映射生活的身影
2026-07-18 21:52:52
谢贤离世不到4小时令人担忧的事还是发生了遗产分配只是冰山一角

谢贤离世不到4小时令人担忧的事还是发生了遗产分配只是冰山一角

不似少年游
2026-07-20 22:01:34
穆杰塔巴骗了所有人?伊朗空袭美军基地是假象,真正目标并非美国

穆杰塔巴骗了所有人?伊朗空袭美军基地是假象,真正目标并非美国

混沌录
2026-07-19 23:26:09
中国有一个奇怪现象:亲家和亲家之间,好像都不怎么联系

中国有一个奇怪现象:亲家和亲家之间,好像都不怎么联系

艺鉴在线
2026-07-21 00:20:33
黄子韬唱到一半发现裤子开了,现场六千人盯着看,他脸红得像煮虾

黄子韬唱到一半发现裤子开了,现场六千人盯着看,他脸红得像煮虾

东方不败然多多
2026-07-20 10:29:06
89岁谢贤去世,生前将儿子送的千万劳斯莱斯卖掉,只为给女友还债

89岁谢贤去世,生前将儿子送的千万劳斯莱斯卖掉,只为给女友还债

追踪之点
2026-07-20 19:09:50
福建3位代县(市、区)长上任

福建3位代县(市、区)长上任

海峡网
2026-07-20 19:22:30
套路太深!深扒邹市明没有上海户口原因:3个孩子3地户籍,有1个是美国籍

套路太深!深扒邹市明没有上海户口原因:3个孩子3地户籍,有1个是美国籍

火山詩话
2026-07-20 06:38:39
太敢拍了!53岁格温妮丝全裸出镜被骂上热搜,商业帝国打脸全网

太敢拍了!53岁格温妮丝全裸出镜被骂上热搜,商业帝国打脸全网

知法而形
2026-07-19 17:05:30
四年后再见,再无梅罗!2030世界杯六国联办,南美三国揭幕战!

四年后再见,再无梅罗!2030世界杯六国联办,南美三国揭幕战!

海浪星体育
2026-07-20 09:47:51
彻底黄了!俄罗斯明确宣布了!

彻底黄了!俄罗斯明确宣布了!

故事终将光明磊落
2026-07-20 09:39:39
潮汕女孩“眼神不对劲”,让家长怒了:我女儿长这样做梦都笑醒!

潮汕女孩“眼神不对劲”,让家长怒了:我女儿长这样做梦都笑醒!

泽泽先生
2026-07-20 16:27:23
2026-07-21 00:55:00
猎维科技人工智能
猎维科技人工智能
专注人工智能领域人才培养
238文章数 87关注度
往期回顾 全部

科技要闻

网易科技"未来大奖2026上半年AI榜单"揭晓

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

体育要闻

65岁肌肉男,世界杯最年长冠军主帅

娱乐要闻

谢霆锋发文确认父亲谢贤去世 享年89岁

财经要闻

AI开始挤泡沫

汽车要闻

综合续航超1600km 2027款星途ES上市置换价16.99万起

态度原创

家居
本地
手机
亲子
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

本地新闻

2026暑期旅行新灵感:跟着影视去旅行

手机要闻

顶配售价预估15999元!有网友抢先预订荣耀Robot Phone 1TB版

亲子要闻

宝蓝和爸爸玩过家家,扮演美食摊主,比赛看谁的生意好~

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版