Я создаю приложение для Android-устройств, которое требует, чтобы оно распознавало по данным акселерометра разницу между шумом при ходьбе и двойным постукиванием по нему. Я пытаюсь решить эту проблему с помощью нейронных сетей.
В начале все шло довольно хорошо, его научили распознавать постукивания по шуму, например, при вставании/садке и более медленной ходьбе. Но когда дело доходило до обычной ходьбы, казалось, что он так и не научился, хотя я снабжал его большой долей шумовых данных.
Мой вопрос: Есть ли в моем подходе серьезные недостатки? Проблема связана с отсутствием данных?
Я выбрал многослойный персептрон с 25 входами и 1 выходом, который я тренирую с обратным распространением. Входные данные представляют собой изменения ускорения каждые 20 мс, а выходные данные находятся в диапазоне от -1 (без касания) до 1 (для касания). Я перепробовал почти все комбинации скрытых входных данных, но больше всего мне повезло с 3–10.
Я использую easyNeurons от Neuroph для обучения и экспорта в Java.
Мои общие тренировочные данные составляют около 50 штук двойных нажатий и около 3к шума.Но я также пытался тренировать его с пропорциональным количеством шума и двойным нажатием.
Данные выглядят так (диапазон от +10 до -10):
Двойные тапы сидя:
Быстрая ходьба:
Итак, чтобы повторить мои вопросы: есть ли какие-либо серьезные недостатки в моем подходе? Нужно ли мне больше данных, чтобы он распознал разницу между ходьбой и двойным постукиванием? Любые другие советы?
Обновление
Итак, после долгих настроек мы свели основную проблему к способности распознавать двойные нажатия во время быстрой ходьбы. Сидячие и регулярные (внутри дома) прогулки мы вполне можем решить.
Быстрая прогулка
Итак, это некоторые тестовые данные о том, как я сначала иду, затем останавливаюсь, стою на месте, затем иду и делаю 5 двойных нажатий во время ходьбы.
Если кого-то интересуют необработанные данные, я связал их с последними данными (быстрая прогулка) здесь