Приветствую всех.
Мое появление в теме - захотелось своими руками пощупать что же такое "нейронные сети" и насколько они сегодня пригодны для практического применения (сложность освоения, эффективность и т.п.)
Для экспериментов была выбрана библиотека FANN, просто как самая близкодоступная (работаю в основном в Линуксе, пишу на C, а эта библиотека устанавливается без прыжков одной командой). Задумался над тестовой задачей. Браться сразу за распознавание не хотелось, но и слишком простые примеры тоже не хотелось.
Придумал следующее: у меня на компьютере ведется лог напряжения сети 220В - просто так, на всякий случай. Прикрепляю кусочек графика - чтоб было понятно как оно выглядит:

И вот - подумал я - пускай мне нейронная сеть попробует апроксимировать этот график!
Вопрос: может уже здесь я сделал ошибку, и данный инструмент для этой задачи абсолютно не подходит ?
На графике невооруженным глазом видны суточные колебания; если приглядываться внимательно, то можно увидеть и недельный период. Т.е., подадим на входы время суток и день недели, и посмотрим что получится.
Задумался над вопросом: а как "правильно" подать время суток ? Если от 0 до 86399 секунд, а потом скачок на 0 - это ведь не соответствует "природе" параметра ... Единственное что мне пришло в голову - сделать 2 входа, и подать на них
синус и косинус времени суток:
sin ( ( 2 * M_PI * ( t % 86400 ) ) / 86400 )
, и аналогично
sin ( ( 2 * M_PI * ( t % 604800 ) ) / 604800 )
- для недели.
Т.е. имеем 4 входа (вместо одного параметра t) , зато гарантирована "плавность" перехода через полночь и через границу недели.
Вопрос: правильно ли я сделал, или есть более удачные решения этой задачи ?
Сконвертировал свой лог в файл для обучения: sin/cos для суток, sin/cos для недели, и значение напряжения (деленное на 1000 - нормализация) - выход.
Скормил сразу весь лог за 3 месяца. Обучилась быстро. Отрезаю кусочек данных для теста, прогоняю, рисую график и вижу:
Вокруг линии около 220 вольт вьется
чистая синусоида с недельным периодом. (По амплитуде - ну, похоже на правду, но точно не сказать - глазом недельный период виден не слишком явно). При этом ни намека на суточный период, ни намека на какие-то нелинейности!
Начинаю играть параметрами сети: 1 или 2 скрытых слоя, число нейронов меняю от балды от 8 до 128, меняю количество эпох обучения от 20 до 200, обучаю по всем данным, либо по вырезке за 1 неделю. Результат неизменен: синусоида с недельным периодом; в "плохих" случаях - с дурацкой амплитудой и далеко от 220, в "хороших" - близко, и с правдоподобной амплитудой. А больше ничего не меняется!
Вопрос: в каком месте я мог сделать глупость ?
(Вообще, опытные люди, подскажите: какие параметры сети кажутся "оптимальными" для этой задачи, чтоб мне впустую числом нейронов не играть ?)
Спасибо...