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

时间:2020-05-06 20:59:44

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

在学校,我们必须听间隔音和弦并确定其名称。我真的很喜欢神经元网络。这就是为什么我想用Python创建一个神经元网络,该网络听音频并给我名称作为输出。我曾经学过,音乐需要LSTM。为此,我是否还需要LSTM?应该从哪里开始?有人可以教我如何实现自己的目标吗?

1 个答案:

答案 0 :(得分:2)

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

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

我希望这些广泛的想法能使您更进一步地解决您的任务。有关实现的详细信息,我想向您介绍keras文档和Internet上无数的教程。

免责声明:

我对音乐理论的了解非常有限,因此请带着一点儿疑问回答我,并随时纠正我或要求澄清。玩得开心