在matlab中实现元音识别的神经网络 - 输入层单元和结构?

时间:2013-09-15 07:42:43

标签: matlab neural-network sound-recognition

我正在做一个关于元音识别的项目,我需要实现一个神经网络。我是这个领域的新手,所以我不完全确定如何做到这一点。我有一个800字的训练集,有8种类型的元音,我的第一步是检查我是否能够用多级的逻辑回归对它们进行分类:

  - 使用Matlab,我对每个样本执行wavread并将得到的矢量存储在800 x 48117矩阵中,48117是最大wav矢量的大小。即在这一步,我有800个例子和48117个“功能”,它们是每个声音文件的频率值。当我运行逻辑回归时,它迭代集合并将其分类为8个类,精度为~99.8%。然后,我还为每个类的可视化生成接收类的光谱图,并将它们与原始样本的光谱图进行比较。

  - 为了区分元音的共振频率,我们有3个共振峰 - F1,F2,F3,可以在频谱图上看到。 (例如F1为500 Hz,我们可以看到频谱图在图中该区域的颜色最深)。

  - 我正在创建一个神经网络的步骤,我几乎不知道如何开始。我不确定有多少输入图层单元和隐藏图层单元。首先,我认为拥有48117个功能并具有该数量的输入单元是不对的,所以我必须以某种方式最小化功能的数量。我认为正确的方法是以某种方式将它们分成3组,对应3个共振峰。这是一个主要问题 - 基于我可以在长矢量上推广哪些能够有3个输入单位?

  - 另一个看起来有点微不足道的问题是我应该拥有多少隐藏单位。我知道对于有多少人没有特别的规定,但根据我的训练集,有经验的神经网络人士会推荐多少人?

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解你的意见。从我收集的内容来看,wavread将.wav文件视为“振幅矢量”。

首先拥有4837个输入,k大小的隐藏层和8个类使得该网络具有4837 * k + 8 * k权重,这可能非常大。 800项培训投入的方式太多了。 人们经常同意(但是,它比艺术更重要)隐藏层不应该比输入层小得多。

如果逻辑回归表现良好,我也不确定为什么需要神经网络。

有了这些疑虑,我不确定我是在回答你的问题,但我会尝试。您需要减小输入大小。它可以通过多种方式完成,一种是小波/傅立叶分析(将一个空间投射到较低维度)。进行傅立叶分析后,您可以“获取”不同的频率。更简单的方法是减少维数(matlab中的一个函数,比如PCA)。它的动机是附近的值非常高度相关。它在图像分析中被称为“白化”。

隐藏层的大小很难估计。最好的方法是针对不同大小的隐藏图层大小进行实验并选择最佳图像(在一夜之间运行循环并查看结果)。

答案 1 :(得分:0)

隐藏单元的数量取决于您想要的性能类型,为了降低性能和良好的结果,您可以拥有更多的隐藏单元,但性能良好且结果不准确。

所以我的建议是尝试使用不同数量的隐藏单元并选择适合您应用的单元。