【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(二)

前情提要

基于上文所说 基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一) 我用tf2.0和Python3.7复现了一个基于CNN做音乐分类器、用余弦相似度评估距离的一个音乐推荐模型。下面浅略介绍一下所用到的原理。

一、总体架构

在这里插入图片描述

二、实际原理

  1. 首先使用8000个平均分布的8个流派30s时长mp3歌曲作为训练集。每一个流派含有1000首歌曲,使用python音频解析库librosa读取音频的采样率设置为44100MFCC的n设置为128,再将生成的一张大声谱图分割成数个128×128子声谱图(则CNN的input_shape设置为(128, 128)),由于时长固定,采样率固定,则理论上分割出的子声谱图个数为10个,则每首歌曲由10张子声谱图组成,总共8W张左右的带有流派标签的子声谱图。
  2. 将这8000×10大约8W张带有流派标签(128×128)声谱图 放进CNN网络进行训练,训练一个准确率达标的CNN音乐流派分类器
  3. 将训练好的音乐流派分类器最后一层的softmax层去掉,使得网络输出一个(1, 32)的权重向量变成一个新模型
  4. 将待推荐的音乐(注意:此处我使用的音乐还是30s时长)放在一个 音乐集合(此处的集合不是指数据结构中的那种集合) 中,用户通过选定音乐集合中的某首歌曲,首先将该歌曲经过MFCC处理后,得到的还是10个子声谱图,并将这10个子声谱图通过新模型后,输出的 (1, 32)的10个权重向量 合并成 (1, 32×10)的1个权重向量
  5. 将音乐集合内除了用户选的那首歌,把其余歌曲都按照(4)步骤生成 (1, 32×10)的1个权重向量,然后通过 余弦相似度 逐一与用户选定的那首歌曲对应的权重向量作计算,算出值最大的,视为相似度最匹配的。

ps: 不必强求一定要用30s的音乐作为音乐集合,只要满足音乐集合内的音乐生成的子声谱图数目相同即可。即一首歌总的权重向量维度要相同。

三、音乐推荐流程

在这里插入图片描述

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值