首先,您需要准确定义要解决的任务:您要对整个音乐/曲目进行分类,还是要对乐段进行分类? / track ?这将影响您需要使用哪种架构来解决您的任务。我将简要介绍解决这些任务的方法。
- 对曲目进行分类:音乐的记录是时间序列,对于每个记录,您都需要有一个标签。使用LSTM(通常是RNN)的第一个直觉是一个好习惯。只需将转换为向量的记录用作LSTM网络的输入序列,然后为每个类给出概率。正如评论中已经指出的那样,在频率空间中工作可能是有益的。但是,仅使用整个轨道的傅立叶变换很可能会丢失重要的信息,因为时间频率信息会丢失。而不是使用短时傅立叶变换(STFT)或梅尔频率倒谱系数(MFCC,这里是一个Python库来计算它们:libROSA)。过于简化了,这些方法会将您的时间序列转换为某种“图像”,二维频率频谱,对于图像分类任务而言,卷积神经网络(CNN)是必经之路。
- 对片段进行分类:如果您想对曲目中的片段进行分类,则需要为歌曲中的每个时间范围添加标签。假设您的歌曲长3分钟,采样频率为60 Hz,则歌曲的矢量表示将具有3 * 60 * 60 = 10800个时间范围,因此对于每个条目,您都需要提供一个类别标签(和弦或其他)。同样,您可以使用LSTM,将向量用作输入序列,并让您的网络生成与歌曲相同长度的输出序列,并将其与类标签进行比较。您还可以将前面提到的STFT或MFC系数用作输入,并利用频率信息,现在您将获得每个时间段的频谱作为输入。
我希望这些广泛的想法能使您更进一步地解决您的任务。有关实现的详细信息,我想向您介绍keras文档和Internet上无数的教程。
免责声明:
我对音乐理论的了解非常有限,因此请带着一点儿疑问回答我,并随时纠正我或要求澄清。玩得开心