前言
最近学了一门智能控制,老师布置了一个大作业,要我们手写BP网络,然后BP设计模型训练,进行三个人的声音识别。在参考了网络大牛的实现,选用MFCC作为语音特征向量作为输入,搭建三层BP网络,在50轮训练后即实现了99%精度的模型。
针对BP网络模型只适合固定大小的输入,我们对音频信号的MFCC系数进行二次特征提取,即从数百帧MFCC中提取出特征最大值,作为输入BP网络的信号。
由于简单三层网络,可能会存在学习能力不强的情况。一开始我设计了一个20,100,3的网络,保证对MFCC系数的充分学习。模型在训练了200轮后顺利达到了$\left(0.99,0.99\right)$,训练集和验证集为$\left(0.8,0.2\right)$,总样本数量为697。训练结果说明MFCC可以提供独特的特征进行人声识别。但是在训练的过程中,我发现,训练结果准确率在195轮到200轮之间有一个飞速上涨的过程,平均每轮上涨8%。我怀疑是数据分布太相似,导致准确率最后才上升。
为了验证我的假设,我训练了多组模型,发现准确率到达95%的轮次和隐藏层节点的个数成正比,与数据分布比例成反比。
由分析可以知道,MFCC系数对音频特征的表征能力非常强,仅需要利用简单BP网络在极少次的训练下就可以取得非常好的效果。
综上所述,在提取音频MFCC特征最大值系数后,BP网络仅需要$\left(20,3,3\right)$三层网络结构实现通过音频信号实现三个人的识别。
代码Demo已经上传Github,欢迎大家指点批评
今天在配置django+mysql时碰到一个诡异的问题,就是无法连接上mysql报错1
2
3
4
5
6
7
8
9
10django.db.utils.OperationalError: (2006, <NULL>)
或者
django.db.utils.OperationalError: (2059, "Authentication plugin 'b'sha256_passwo
rd'' not configured")
或者
django.db.utils.InternalError: (1862, 'Your password has expired. To log in you
must change it using a client that supports expired passwords.')
或者
django.db.utils.OperationalError: (1045, "Access denied for user 'cyd'@'localhos
t' (using password: YES)")
最近在调试0.96寸oled时遇见了一个非常奇怪的问题,当我软件模拟spi时某些引脚死活不工作,一开始我以为是我的板子问题,但实际上是stm32对于某些引脚默认有一些操作,导致无法正常的初始化。
前几日,我做了一个简单地划词翻译工具,还挺好用的,但是作为一个python脚本,每次都要打开命令行去执行或者是用spyder太过麻烦了,本来就是想简单简单再简单,所以一心搞事的我又踏上了艰难的python打包之旅。
python打包成exe执行文件是挺费劲的,毕竟python本身是没有这个工具的。我用的anaconda也没有这个功能。经过查阅资料,我发现其实python有两个比较好用的打包工具,一个是pyinstaller,一个是py2exe。当时年轻的我还没有意识到,我即将为我的冲动付出时间的代价。