训练识别音乐和弦及音程的神经网络

在学校,我们需要听音程和和弦,并确定它们的名称。我对神经网络非常感兴趣。因此,我想用Python创建一个神经网络,它可以听取音频并输出名称。我曾经学到,对于音乐我需要用到LSTM。对于这个目的我是否也需要LSTM,以及我应该如何开始呢?有谁可以教我如何实现我的目标吗?


回答:

首先,你需要明确定义你想要解决的任务:你是想对整首音乐/曲目进行分类,还是想对曲目/曲目的片段进行分类?这将影响你解决任务所需使用的架构。我将简要介绍每种任务的处理方法。

  • 对曲目进行分类:音乐录音是时间序列,你需要为每段录音标记标签。你最初想到使用LSTM(或一般意义上的RNN)是一个很好的想法。只要将你的录音转换成向量作为LSTM网络的输入序列,并让它输出每个类别的概率。正如评论中所指出的,在频域工作可能是有益的。然而,仅使用整个曲目的傅里叶变换很可能会丢失重要信息,因为时间频率信息会丢失。更好的方法是使用短时傅里叶变换(STFT)或梅尔频率倒谱系数(MFCC,这里有一个计算它们的Python库:libROSA)。简单来说,这些方法会将你的时间序列转换成某种“图像”,即二维频谱,而对于图像分类任务,卷积神经网络(CNNs)是首选方法。
  • 对片段进行分类:如果你想对曲目的片段进行分类,你需要为歌曲中的每个时间框架提供标签。假设你的歌曲时长为3分钟,采样频率为60 Hz,你的歌曲向量表示将有3*60*60 = 10800个时间框架,因此你需要为每个条目提供一个类别标签(和弦或其他)。同样,你可以使用LSTM,将你的向量作为输入序列,让你的网络生成与歌曲长度相同的输出序列,并与类别标签进行比较。你也可以使用前面提到的STFT或MFC系数作为输入,并利用频率信息,现在你将为每个时间框架提供一个频谱作为输入。

我希望这些广泛的想法能帮助你更接近解决你的任务。对于实现细节,我建议你参考keras文档和网络上无数的教程。

免责声明:

我的音乐理论知识相当有限,所以请对我的回答持保留态度,并随时纠正我或要求澄清。祝你玩得开心

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注