Я пытаюсь использовать ANN для определения высоты музыкальных нот. Сеть представляет собой простой двухслойный MLP, входы которого в основном представляют собой DFT (усредненные и логарифмически распределенные), а 12 выходов соответствуют 12 нотам конкретной октавы.Обнаружение уровня с помощью нейронных сетей
Сеть тренируется с несколькими образцами из этих 12 нот, исполняемых каким-либо инструментом (по одной заметке за раз), и несколькими образцами «тишины».
Результаты на самом деле хорошие. Сеть способна точно определять те ноты, которые играют разные инструменты, это относительно шумовая шумоизоляция, и даже не потеряет ее полностью, когда играет песня.
Цель, однако, состоит в том, чтобы иметь возможность обнаруживать полифонический звук. Так что, когда две или более нот будут сыграны вместе, будут срабатывать две соответствующие нейроны. Удивительно то, что сеть на самом деле уже делает это до некоторой степени (обучается только монофоническим образцам), однако менее последовательно и менее точно, чем для монофонических заметок. Мой вопрос в том, как я могу улучшить его способность распознавать полифанский звук?
Проблема в том, что я не совсем понимаю, почему она на самом деле работает уже. Различные примечания (или их ДПФ) - это в основном разные точки в пространстве, для которых сеть обучается. Поэтому я понимаю, почему он распознает похожие звуки (близлежащие точки), но не то, как он «завершает» вывод для комбинации заметок (которые образуют отдаленную точку от каждого из примеров обучения). Точно так же сеть И, которая обучена (0,0) (0,1) (1,0) = (0), не должна «заключать», что (1,1) = (1).
Атрибут грубой силы - это тренировка сети с максимально возможным количеством полифонических образцов. Однако, поскольку сеть, похоже, как-то смутно понимает идею из монофонических образцов, здесь, вероятно, есть что-то более фундаментальное.
Любые указатели? (извините за длину, кстати :).
Только принимая максимальную частоту очень ненадежно – finnw