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



我正在做一个关于元音识别的项目,我需要实现一个神经网络。我是这个领域的新手,所以我不完全确定如何正确地做到这一点。我有一个包含 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 个输入单元?
- 另一个似乎有点微不足道的问题,是我应该有多少个隐藏单位。我知道没有特别的规则来规定有多少,但根据我的训练集,一个有经验的神经网络人会推荐多少?

我不确定我是否正确理解了您的输入。根据我收集的信息,wavread 将.wav文件读取为"振幅矢量"。

首先,有 4837 个输入、k 大小的隐藏层和 8 个类,使这个网络有 4837*k + 8*k 的权重,这可能相当大。对于 800 个训练输入来说太多了。人们经常同意(但是,它更像是艺术而不是科学),隐藏层不应该比输入层小得多。

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

有这些疑问,我不确定我是否在回答你的问题,但我会尝试。您需要减小输入大小。它可以通过多种方式完成,一种是小波/傅里叶分析(将一个空间转换为低维)。进行傅里叶分析后,您可以"存储"不同的频率。更简单的出路是进行降维(matlab中的一个函数,类似于PCA)。它的动机是附近的值高度相关。它在图像分析中被称为"白化"。

隐藏层的大小很难估计。最好的方法是针对不同大小的隐藏层大小进行实验,然后选择最好的一个(运行一夜的循环并查看结果)。

隐藏单元的数量取决于你想要什么样的性能,对于较低的性能和良好的结果,你可以有更多的隐藏单元,但为了良好的性能和不太准确的结果。

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

最新更新