Нейронная сеть в PHP на Denvere

от автора

В качестве нейронной сети была выбрана библиотека – FANN (Fast Artificial Neural Network). Как ни странно, но использование нейронной сети в PHP, вызвало ряд мелких затруднений.
Во-первых, это ее установка. Для работы я использую пакет 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *