Пишем нейросеть на Python. Часть 1.

Для того, чтобы создать на Python нейросеть, нам понадобиться numpy, которая содержит нужные нам математические функции. Для установки этой библиотеки через pip выполните команду python -m pip install numpy.

Для начала создадим небольшую заготовку, в частности, класс нейрона и класс передаточной функции. Подробнее см. статью нейронные сети.

У нас будут три передаточных функции:

  • Как есть.
  • Сигмоидная.
  • Пороговая.

У каждой передаточной функции есть кое-что общее: все их надо вычислять. Но каждую будем вычислять по разному. Поэтому необходим создать абстрактный класс, от которого все классы передаточной функции будут наследовать общий метод compute. У абстрактного класса данный метод будет абстрактным, а в каждом дочернем классе он будет реализован по своему. Этот позволит навестить на нейрон любую передаточную функцию (не ограничиваясь теми, что мы разработаем, так как в будущем мы сможем их добавлять).

Правда, а Python-не, в отличии от таких ООП языков, как C# или Delphi, нет абстрактных классов. Но есть эмулятор абстрактных классов. Для того, чтобы его заюзать, надо лишь импортировать соответствующие библиотеки:

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

А для того, чтобы метод сделать абстрактным, необходимо указать у него декоратор @abstractmethod. Декоратор — эта такая мощная шутка, которая позволяет неявно обернуть код в другой код. В данном случае декоратор @abstractmethod оборачивает объявление метода в код проверки, что абстрактный метод реализован.

Теперь мы знаем достаточно, чтобы реализовать класс нейрона:

В качестве абстрактного класса тут у нас класс передаточной функции. На его основе создаются конкретные передаточные функции, пока мы реализовали только пороговую, «как есть» и сигмоидную передаточную функции. Данный код содержит реализации этих функций, реализацию класса нейрона и тестовые примеры, при помощи которых можно проверить, как работает данный класс.

Где его можно применить? Если написать функцию обучения, то данный нейрон можно использовать как простейшую нейросеть типа «Адалин», которая решает простейшие линейно разделимые задачи классификации. Но мы этого делать не будем, а сразу начнем писать нормальную нейросеть, с несколькими слоями, которая будет обучаться через генетический алгоритм. но этим мы займемся на следующем уроке.

Comments

So empty here ... leave a comment!

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

Sidebar