Во-первых, это ее установка. Для работы я использую пакет Denver. И найти руководство по установке ее на Denver, мне так и не удалось. Первое что я узнал после прочтения некоторой документации, так это то, что для того чтобы использовать FANN в PHP на Denvere, необходимо скачать расширение php_fann. Здесь все было хорошо, и долго его искать не пришлось. После установки расширения и попытки инициализации были получены ошибки. На следующем этапе поиск информации уже занял более длительное время. Но как оказалось, попытки поиска информации в преодолении проблемы принесли успех. Как выяснилось, необходима еще одна библиотека это fanndoubleMT.dll. Вот эту самую библиотеку (для windows XP) помещаем в каталог windows/system32. Вот теперь все окончательно готово и можем наслаждаться работой этой чудной библиотеки.
Ну, с установкой мы разобрались, а теперь самое время продемонстрировать ее работу. Здесь предполагается, что мы располагаем готовой моделью нейронной сети.
define ( 'ROOT_DIR', dirname ( __FILE__ ) ); $ann = fann_create_from_file(ROOT_DIR . '/neta.net'); function MaxValueIndex($Output) { $max_value = $Output[0]; $result = 0; for ($i = 0; $i < count($Output); $i++) { if ($max_value < $Output[$i]) { $max_value = $Output[$i]; $result = $i; } } return $result; } $Map = 'DFGHJNRSTVYZ23456789'; $Input = array (); $Output = array (); if (fann_run($ann, $Input)) { for ($i = 0; $i < fann_get_num_output($ann); $i++) { $Output[] = fann_get_output($ann, $i); } echo $Map[MaxValueIndex($Output)]; } fann_destroy($ann);
Переменная Map содержит перечисленное множество значений, на которых обучена нейронная сеть. В данном случае это множество символов. Переменная Input это массив в качестве вектора значений образа (здесь ее значение не приводиться из-за большого ее объема). Под цифрой один указываются значащие сигналы и под нулем наоборот. В данном случае под цифрой один обозначаются черные пикселы, и белые пикселы под цифрой ноль. Переменная Output это будущий массив релевантности нейронов.
После выполнения данного скрипта в переменной Output будет размещаться массив следующего вида:
array ( [0] => -0.124984497083 [1] => 0.0362023918336 [2] => 0.103160730493 [3] => 0.0227304909574 [4] => 0.0367053152269 [5] => 0.0841447045514 [6] => 0.741507337134 [7] => -0.165524318402 [8] => -0.00131124177762 [9] => 0.0482572488403 [10] => -0.170440603492 [11] => 0.118754000147 [12] => -0.0797734517639 [13] => -0.0674092885435 [14] => 0.0151773514834 [15] => -0.0318037079007 [16] => 0.103354950974 [17] => 0.0238432503845 [18] => 0.402475724765 [19] => -0.0714993635597 )
Нам необходимо узнать индекс самого релевантного нейрона. Для этой цели используется функция MaxValueIndex. Которая принимает на вход массив значений с релевантностью всех полученных нейронов. Далее по полученному номеру индекса из множества Map получаем ответ. Ответом будет некий символ.
Используемые функции библиотеки:
- resource ann fann_create_from_file(string configuration_file) – данная функция принимает на вход один параметр, это путь к сконфигурированному файлу с настройками нейронной сети. В случае успеха возвращает указатель на созданную сеть, или FALSE в случае ошибки;
- mixed fann_run(resource ann, array input) – в качестве параметров этой функции передается указатель на созданную нейронную сеть и входной вектор. Результатом функции является массив значений, или FALSE в случае ошибки;
- int fann_get_num_output(resource ann) – в качестве параметра в эту функцию необходимо передать указатель на созданную нейронную сеть. Выходным результатом будет являться количество выходных нейронов;
- int fann_get_output(resource ann, int number) – для этой функции требуется два параметра. Первый это указатель на созданную нейронную сеть и второй – индекс требуемого нейрона. Результатом функции является релевантность нейрона под указанным номером;
- bool fann_destroy(resource ann) – эта функция уничтожает созданную нейронную сеть и требует в качестве параметра указатель на созданную ранее нейронную сеть. Результатом функции является TRUE, или FALSE в случае ошибки.
Скачать необходимые библиотеки можно здесь.
ссылка на оригинал статьи http://habrahabr.ru/post/178879/
Добавить комментарий