Установка нейронной сети FANN в Linux

Устанавливать библиотеку Fast Artificial Neural Network будем на операционную систему Debian (один из дистрибутивов Linux). Произвести установку библиотеки можно двумя способами.

  1. установка из репозиториев;
  2. установка всех элементов в отдельности.

Первый метод конечно облегчает немного установку, но это того не стоит. Вот с чем мне собственно пришлось столкнуться. Когда мне понадобилось произвести установку на Debian. Я нашел руководство по установке, в котором описывался первый метод. Бегло прочитав его и уже успев обрадоваться (как оказалось в дальнейшем, ненадолго), я принялся выполнять в точности все этапы по установке библиотеки, описанные в руководстве. Нюансов не возникло. Вроде библиотека установилась и расширение для PHP тоже. Казалось, что все должно было работать. Но не тут то было. Сначала я подключил нейронную сеть, которую использовал на denwere. Но результат оказался нулевым. Оказалось, что не проходила даже инициализация самой библиотеки. Перечитав еще раз руководство по установке и аналогичные руководства с других ресурсов, я понимал, что все должно работать. Но в итоге ничего не работало. Два дня у меня ушло на решение проблемы с установкой. Когда все возможные варианты (а их было немного) были исчерпаны у меня “пронеслась” мысль, а что если дистрибутив из репозитариев самой библиотеки “битый”. И как оказалось в дальнейшем, так оно и было. Поэтому рекомендую вам использовать второй метод установки, в итоге все будет работать, и ваши нервы будут в полном порядке.

Начало установки

Для установки нам нужны следующие инструменты:

  1. программа make;
  2. компилятор gcc;
  3. утилита phpize из пакета php5-dev.

Если первые два инструмента могут уже быть проинсталлированы, то третий, скорее всего нет. Но мы на всякий случай проверим все три.

dpkg -l | grep make
ii  makedev	2.3.1-88   creates device files in /dev
dpkg -l | grep gcc
ii  gcc-3.3-base   1:3.3.6-15   The GNU Compiler Collection (base package)
ii  gcc-4.1-base   4.1.2-25     The GNU Compiler Collection (base package)
ii  gcc-4.3-base   4.3.2-1.1    The GNU Compiler Collection (base package)
ii  libgcc1        1:4.3.2-1.1 GCC support library
dpkg -l | grep php5-dev

Ну вот, как и следовало ожидать, у нас действительно ничего не проинсталлировано. До начала установки, желательно произвести обновление репозиториев. Для этого воспользуемся командой:

apt-get update

Теперь необходимо установить отсутствовавшие инструментарии:

apt-get install make
apt-get install gcc
apt-get install php5-dev

Далее необходимо получить информацию об архитектуре, чтобы знать какие пакеты библиотеки Fast Artificial Neural Network (хотя Debian не даст уставить пакеты с неподходящей архитектурой) устанавливать. Для этого используем команду:

uname –m

По результату видим, что сервер имеет архитектуру:

i686

Переходим в каталог /usr/local/src и скачиваем для архитектуры i686 следующие пакеты:

cd /usr/local/src
wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/libf/libfann1/
libfann1_1.2.0-1_i386.deb
wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/libf/libfann1/
libfann1-dev_1.2.0-1_i386.deb

Убедимся все ли скачалось:

ls -1
libfann1_1.2.0-1_i386.deb
libfann1-dev_1.2.0-1_i386.deb

Теперь их необходимо установить в определенном порядке:

dpkg -i libfann1_1.2.0-1_i386.deb
dpkg -i libfann1-dev_1.2.0-1_i386.deb

Установка расширения для PHP

Для того чтобы приступить установке расширения, его необходимо скачать:

wget http://pecl.php.net/get/fann

Проверим или архив на месте:

ls -1
fann

Далее его необходимо распаковать:

tar xvfz fann
package.xml
fann-0.1.1/config.m4
fann-0.1.1/fann.c
fann-0.1.1/php_fann.h
fann-0.1.1/demo.php
fann-0.1.1/CREDITS
fann-0.1.1/EXPERIMENTAL

Затем перейдем в каталог /usr/local/src/fann-0.1.1

cd fann-0.1.1

Все, осталось только все скомпилировать. Для начала необходимо выполнить команду phpize. Которая подготовит окружение PHP-расширения.

phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

Далее необходимо запустить скрипт configure.

./configure

Все, сейчас осталось собрать PHP расширение программой make.

make

Если вы увидите нечто похожее на следующие строки:

fann.c:393: error: 'zif_fannOO___set' undeclared (first use in this function)
fann.c:393: error: (Each undeclared identifier is reported only once
fann.c:393: error: for each function it appears in.)
fann.c:403: error: Б-?zif_fannOO___getБ-? undeclared (first use in this function)

то нужно в файле php_fann.h закомментировать строку 28 #define PHP_FANN_OO 1. И повторить вызов программы make.

make
libtool: install: cp ./.libs/fann.so /usr/local/src/fann-0.1.1/modules/fann.so
libtool: install: cp ./.libs/fann.lai /usr/local/src/fann-0.1.1/modules/fann.la
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/sbin" ldconfig -n /usr/local/src/fann-0.1.1/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/src/fann-0.1.1/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Все, расширение собрано и осталось его проинсталлировать:

make install
Installing shared extensions:     /usr/lib/php5/20090626/

Если вы добавили расширение в /etc/php5/cli/php.ini, то можно посмотреть подключен ли модуль следующей командой:

php -m | grep fann
fann

Я лично стараюсь синхронизировать настройки сразу везде:

  • /etc/php5/apache2/php.ini;
  • /etc/php5/cgi/ php.ini;
  • /etc/php5/cli/ php.ini.

Для того чтобы проверить работу библиотеки, требуется запустить модуль demo.php. Он находиться в каталоге /usr/local/src/fann-0.1.1.

Еще есть небольшой один нюанс. Возможно вы не сможете использовать сеть обученную в другой версии библиотеки Fast Artificial Neural Network, с этой библиотекой. Придется под Linux ее переобучать. Но ничего страшного в этом нет.

По проектированию и созданию нейронной сети читайте эту статью.