Реализация нейронной сети для распознавания гласных в единицах входного слоя и структуре matlab?

Я делаю проект по распознаванию гласных, и мне нужно внедрить нейронную сеть. Я новичок в этой области, поэтому я не совсем уверен, как это сделать правильно. У меня есть тренировочный набор из 800 слов с 8 типами гласных, и мой первый шаг состоял в том, чтобы проверить, могу ли я классифицировать их с помощью логистической регрессии для нескольких классов:

- Используя Matlab, я выполнил wavread для каждого сэмпла и сохранил результирующие векторы в матрице 800 x 48117, где 48117 - это размер наибольшего вектора wav. Т.е. на этом этапе у меня есть 800 примеров и 48117 "функций", которые являются значениями частот частот для каждого звукового файла. Когда я запускаю логистическую регрессию, она перебирает множество и классифицирует его на 8 классов с точностью ~99,8%. Затем я также генерирую спектрограммы для полученных классов с целью визуализации каждого класса и сравнения их со спектрограммами исходных образцов.

- Чтобы выделить резонирующие частоты гласных, у нас есть 3 форманты - F1, F2, F3, которые можно увидеть на спектрограммах. (например, F1 составляет 500 Гц, и мы видим, что спектрограмма имеет самые темные цвета в этой области на графике).

- Я нахожусь на этапе создания нейронной сети, и я почти не знаю, как начать. Я не уверен, сколько единиц входного слоя и скрытых единиц слоя иметь. Во-первых, я думаю, что иметь 48117 функций и иметь такое количество единиц ввода неправильно, поэтому я должен как-то минимизировать количество функций. Я думаю, что правильным способом было бы как-то разделить их на 3 группы, соответствующие 3 формантам. Это главный вопрос - на основании чего я могу обобщить длинные векторы, чтобы иметь возможность иметь 3 входных блока?

- Другой вопрос, который кажется немного более тривиальным, - сколько у меня должно быть скрытых юнитов. Я понимаю, что нет конкретных правил, сколько их иметь, но исходя из моего тренировочного набора, сколько бы порекомендовал опытный специалист по нейронным сетям?

2 ответа

Решение

Я не уверен, что правильно понимаю ваш вклад. Из того, что я понял, wavread читает файл.wav как "вектор амплитуд".

Прежде всего, имея 4837 входов, скрытый слой размера k и 8 классов, эта сеть имеет вес 4837*k + 8*k, что может быть довольно большим. Слишком много для 800 тренировок. Часто соглашаются (но это больше искусство, чем наука), что скрытый слой не должен быть намного меньше, чем входной слой.

Я также не уверен, зачем нужна нейронная сеть, если логистическая регрессия показала хорошие результаты.

Имея эти сомнения, я не уверен, что отвечаю на ваш вопрос, но я постараюсь. Вам нужно уменьшить размер ввода. Это может быть сделано разными способами, один из них - вейвлет / анализ Фурье (который переводит одно пространство в низкоразмерное). После проведения анализа Фурье вы можете "подбрасывать" разные частоты. Более простой выход - уменьшить размерность (одна функция в Matlab, что-то вроде PCA). Это обусловлено тем фактом, что близлежащие значения очень сильно коррелированы. Это называется "отбеливание" в анализе изображений.

Размер скрытого слоя очень сложно оценить. Лучший способ - это провести эксперименты для разных размеров скрытого размера слоя и выбрать лучший (запустить цикл на ночь и посмотреть результаты).

Количество скрытых единиц зависит от того, какую производительность вы хотите, для меньшей производительности и хорошего результата вы можете иметь больше скрытых единиц, но для хорошей производительности и менее точного результата.

Поэтому я предлагаю попробовать другое количество скрытых устройств и выбрать тот, который подходит для вашего приложения.

Другие вопросы по тегам