【问题标题】:Training a Neuronal Network which recognize music chord and intervals训练识别音乐和弦和音程的神经网络
【发布时间】:2020-08-22 00:16:17
【问题描述】:

在学校,我们必须听音程和和弦并确定它们的名称。我真的很喜欢神经网络。这就是为什么我想用 Python 创建一个神经网络,它听音频并给我一个名字作为输出。我曾经了解到,对于音乐,我需要一个 LSTM。为此,我是否还需要 LSTM 以及我应该如何/从哪里开始?谁能教我如何实现我的目标?

【问题讨论】:

  • 首先:这实际上是一项无需任何神经网络就可以很好地解决的任务。但我想这里的重点是将其用作练习。当“传统地”解决这样的任务时,显而易见的方法是在频率空间中工作,首先使用傅里叶变换 (en.wikipedia.org/wiki/Fast_Fourier_transform) 变换信号。我非常有信心,这可能也是 ANN 完成这项任务的理想表示。因此,我会简单地使用频率空间中的向量作为输入。
  • 非常感谢您提供这些信息。是的,你说得对,这只是为了自学。

标签: python python-3.x tensorflow neural-network artificial-intelligence


【解决方案1】:

首先你需要准确定义你想解决的任务:你喜欢对整段音乐/曲目进行分类还是对片段进行分类/轨道?这将影响您需要使用哪种架构来解决您的任务。我将简要介绍每种任务的方法。

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

我希望这些广泛的想法能让您更接近解决您的任务。对于实现细节,我想向您指出keras 文档和互联网上的无数教程。

免责声明:

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

【讨论】:

  • 非常感谢。我现在肯定更进一步了。明天我会详细检查一下。也许到时候我会想出一些问题,但目前为止很清楚。
猜你喜欢
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
相关资源
最近更新 更多