Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.59.165] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Понимаю что не в тему пишу, но у меня один вопрос особа больше спрашивать нечего.
Haze Подскажите плиз если хорошо знаете нейронные сети - у меня вот такая проблема по спектру без проблем нейросеть обучается и распознает. А вот после DCT я не врубаюсь как обучить. В одном и том же месте DCT коэффициенты могут прыгать например от +100 до -100. Как веса в таких случаях подстраивать. Я обучаю на одного говорящего и при значении например +61 соответствующий вес обучу, а скажет другой в томже месте будет как на скриншоте например -71 и вес уже даст отрицательное значение, получается нейросеть будет воспринимать такие случаи как ошибка, как обучить на взаимоисключающих данных? Прикреплённый файлSpectrum.JPG (118,15 Кбайт, скачиваний: 753) Прикреплённый файлDCT.JPG (131,03 Кбайт, скачиваний: 705) Эта тема была разделена из темы "коммерческие проекты speech-to-text" |
Сообщ.
#2
,
|
|
|
TViT
Не такой уж я и великий специалист по нейронным сетям. Думаю, если бы коэффициенты не прыгали, то и использовать нейросети было бы не нужно. Я тоже с таким сталкивался, выходил из ситуации, уменьшая скорость обучения в процессе обучения. Чем больше итераций обучения прошло, тем ниже скорость. Можно сразу низкую скорость задать, но обучаться может очень долго. В результате значения весов останавливаются на каких-то значениях и сеть начинает правильно распознавать. Если не поможет, можно нейросети ещё слой добавить. |
Сообщ.
#3
,
|
|
|
Ясно. Я просто не понимаю зачем DCT нужно. После него сразу куча проблем автоматически появляется. А уменьшение анализируемых данных от спектра особа сильного и нет. Пока тратиться время на DCT преобразование за то же время можно проанализировать данные которыми пренебрегают после DCT.
Например слово разделено на 20 тайм слотов (временных окон) и 20 фильтров в слоте 400 значений для анализа. А после DCT 20 таймслотов и 13 коэффициентов 260 значений разница всего 140 значений. А притом что еще нужно косинусное преобразование выполнить так и вообще по времени анализ слова будет дольше. У меня просто микроконтроллер все делает у него на борту 16кБ ОЗУ и 14 из них занимает буфер для захвата голосовой команды. Особа не разгуляешься. |
Сообщ.
#4
,
|
|
|
TViT Я косинусные преобразования для анализа речи не использовал. Обходился MFCC.
|
Сообщ.
#5
,
|
|
|
Haze А MFCC коэффициенты это не спектр после банка фильтров пропущеный через DCT. А то я что-то начинаю запутываться ))
|
Сообщ.
#6
,
|
|
|
TViTДа, вы правы. Я сам запутался.
Странно, что обучение нейросети стало менее эффективным. У меня существенно уменьшалось количество признаков. Сколько входов и выходов у нейросети, которую вы используете? |
Сообщ.
#7
,
|
|
|
Haze Ну я по всякому экспереминтирую. И просто на перцептроне делал соответственно с 400 входами и выходами на сколько нужно слов. В моем случае 3 слова. Это параллельное вычисление можно сказать. И потом делал последовательно -параллельное вычисление с 20 входами по числу фильтров и загружал постепенно данные по 20 значений от фильтров соответственно 20раз на сколько временных окон разбит сигнал. Сейчас продумываю свою систму обучения. Потому что сеть глупая получается. В замыслах чтобы она автоматически классифицировала значение от определенного фильтра в определенный момент. Другими словами коэффициенты обученые будуь одинаковые везде а давать значения они будут по определенным алгоритмам в зависимости от важности составляющих анализируемого слова в определенным момент. Как это сделать куча мыслей, и через динамические веса, и через надстройку над весами как бы добавить арбитра весовых значений (арбитр полученного опыта), что-то типа обратной связи.
Потом хочу на НММ сделать, но пока только темы создал что такое НММ на разных сайтах так что пока с нейросетями бодаюсь. Результаты оч хорошие, но как всегда проблемы из-за большого разброса входных данных в зависимости от говорящего. |
Сообщ.
#8
,
|
|
|
Haze Вы правы DCT сжатие дает эффект уменьшения вычислений если сеть со скрытыми слоями и чем больше нейронов в слое тем больше уменьшается весов обучения с уменьшением признаков.
У вас сколько входов было и сколько скрытых слоев и нейронов в слое? |
Сообщ.
#9
,
|
|
|
Разные эксперименты были с разными цифрами. Количество входов нейросети == количество MFCC-коэффициентов. Количество выходов == количество возможных ответов распознавателя.
Например, обучал на целые слова (числа от "1" до "10" плюс десяток глаголов "вперёд", "назад", "старт", "закрыть" ...), используя сеть с 11 входами и 20 выходами без скрытых слоёв. Обучалась сеть хорошо, распознавались слова вообще без ошибок. (Но только на мой голос, и если сотрудничать с системой). На несколько голосов и на фонемы русского языка обучал, используя около 40 входов и выходов и один скрытый слой (несколько сотен нейронов). Если добавлял ещё скрытый слой или менял кол-во нейронов, то разницы не замечал. Цитата TViT @ DCT сжатие дает эффект уменьшения вычислений если сеть со скрытыми слоями Не совсем понял. Вообще, я имел в виду, что выделение MFCC-коэффициентов позволяет заменить весь сигнал (на каком-то интервале) несколькими циферками, что существенно снижает количество обрабатываемых данных (вне зависимости от числа нейронов в слоях). А количество слоёв и нейронов в них влияют на способность сети обобщать. |
Сообщ.
#10
,
|
|
|
Цитата Разные эксперименты были с разными цифрами. Количество входов нейросети == количество MFCC-коэффициентов. Количество выходов == количество возможных ответов распознавателя. Например, обучал на целые слова (числа от "1" до "10" плюс десяток глаголов "вперёд", "назад", "старт", "закрыть" ...), используя сеть с 11 входами и 20 выходами без скрытых слоёв. Обучалась сеть хорошо, распознавались слова вообще без ошибок. (Но только на мой голос, и если сотрудничать с системой). Такая сеть у меня тоже примерно также работала, но вся проблема обычного перцептрона без скрытых слоев это чувствительность. Потому что, это простой сумматор входных значений умноженных на веса. А значит его легко обмануть если всплеск спектра от хлопка или чего=то еще большого по амплитуде попадет на обученные значения и результат умножения с весами пройдет порог чувствительности нейрона который давали при обычном произношении все веса и как результат истина на ложный звук. Например я обучал на 3 слова своим голосом в рельном времени, чтобы отследить всю цепочку, детектирование команды -> захват -> выделение -> обрезание. И потом когда все отлично распознавалось начинал гонять сеть по разным словам, говорил похожие по спектру слова, при ошибках переобучивал сеть, потом снова смотрел как истинные слова распознаются и потом когда все устаканивалось, врубал радио или какую нибудь передачу, новости, музыку и там такие пляски по спектру начинались, считай генератор случайного спектра был - что сеть периодически давала сбой и показывала иногда истинное слово. Это не фонемное распознавание, а распознавание по спектральному образу. Цитата На несколько голосов и на фонемы русского языка обучал, используя около 40 входов и выходов и один скрытый слой (несколько сотен нейронов). Если добавлял ещё скрытый слой или менял кол-во нейронов, то разницы не замечал. 40 входов - это что за данные вы закидывали? 13 DCT я понимаю, а 40 откуда и что за признаки, сколько у вас фильтров во временном окне и насколько слово делилось окон, например не для слитной речи - просто одно слово кто-то сказал? Цитата Не совсем понял. Вообще, я имел в виду, что выделение MFCC-коэффициентов позволяет заменить весь сигнал (на каком-то интервале) несколькими циферками, что существенно снижает количество обрабатываемых данных (вне зависимости от числа нейронов в слоях). А количество слоёв и нейронов в них влияют на способность сети обобщать. Ну например 20 входов(по числу значений от фильтра или 13 DCT) и 100 нейронов в скрытом слое, итого комбинаций синапсов-весов 20*100=2000 весов обучить, или 13*100=1300 почти в 2 раза, а с возрастанием кол-ва нейронов в скрытом слое умножается кол-во весов для обучения. А для перцептрона особого различия нет, как я понимаю, там кол-во коэффициентов * на кол-во выходов. |
Сообщ.
#11
,
|
|
|
13 MFCC-коэффициентов, 1-я и 2-я производная, итого 39 входов.
42 фонемы -- выхода. Когда делил на окна, то длиной 10 мс. Соответственно каждые 10 мс сигнала нейросеть выдавала решение. 13*1000=13000 |
Сообщ.
#12
,
|
|
|
А что за производные откуда беруться как расчитываются и для чего, я не читал о таком нигде... Разве 13 MFCC несут мало информации о спектре? А сколько фильтров было и какой диапазон мин - макс по частоте и частоту дискретизации какую выбирали. 13* поправил ))
|
Сообщ.
#13
,
|
|
|
MFCC-коэффициенты несут статическую информацию о спектре и не отражают того, как сигнал изменяется во времени. Первая производная показывает скорость изменения сигнала, а вторая -- ускорение.
Я считал следующим образом: для i-кадра первая производная с'(i) получалась как разность c(i+2)-c(i-2), т.е. разность между значением коэффициентов через два кадра вперёд и через два кадра назад. И так для каждого из 13 коэффициентов в кадре. Вторая производная получалось по аналогичной формуле, только производная бралась от производной и кадры рассматривались соседние: c"(i)=c'(i+1)-c'(i-1). Итого на каждом кадре получалось по 13 значений c, c' и c". Частота дискретизации была 8кГц, соответственно диапазон частот от 0 до 4000 Гц, количество фильтров уже не помню, около 22 или 24. |
Сообщ.
#14
,
|
|
|
Ясно. Странно нигде такого не встречал. У меня были такие мысли, но относительно спектра, я вычислял соотношение вверх по спектру между значением нижнего фильтра поделенного на вышестоящее по спектру значение и получал как бы производную но по частоте, а не по времени. Думаю как развивается сигнал во времени нейросеть и Скрытые Марковские Модели автоматически учитывают и соответственно обучаются... А что намного лучше распознавание и дикторонезависимость получались с производными? Экспериментировали? Может лучше еще было фильтров добавить взамен производным?
В любом случае спасибо за инфу и плюсик конечно. |
Сообщ.
#15
,
|
|
|
Распознавалось лучше, но не очень намного. Намного (раз в десять) время обучения увеличивалось, но это не критично.
Нейросеть динамику без производных не учитывает (ну если только как-нибудь косвенно). НММ -- тоже. А вообще, при анализе речи, использование производных -- почти стандарт (приведено во многих статьях). Увеличивать количество фильтров пробовал, но когда их больше -- их частотный диапазон меньше, и у меня в каких-то ситуациях происходило деление на ноль. Если бы частота дискретизации была больше (а фонограммы это позволяли), то такого бы не происходило конечно, но мне хотелось экспериментов в частотном диапазоне ближе к телефонному каналу. |