Рубрики

Реализация процесса обучения искусственной нейронной сети на Python

Искусственная нейронная сеть (ANN) — это парадигма обработки информации, которая вдохновляет мозг. ИНС, как и люди, учатся на собственном примере. ANN конфигурируется для конкретного приложения, такого как распознавание образов или классификация данных, посредством процесса обучения. Обучение в значительной степени включает в себя корректировки синаптических связей, которые существуют между нейронами.

Мозг состоит из сотен миллиардов клеток, называемых нейронами. Эти нейроны связаны вместе синапсами, которые являются ничем иным, как связями, через которые нейрон может послать импульс другому нейрону. Когда нейрон посылает возбуждающий сигнал другому нейрону, этот сигнал будет добавлен ко всем другим входам этого нейрона. Если оно превысит заданный порог, то это заставит целевой нейрон запустить сигнал действия вперед — так мыслительный процесс работает внутренне.

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

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

Обратите внимание, что выходные данные напрямую связаны с третьим столбцом, т. Е. Значения входа 3 соответствуют выходным значениям в каждом обучающем примере на рис. 2. Таким образом, для тестового примера выходное значение должно быть 1.

Процесс обучения состоит из следующих этапов:

  1. Распространение вперед:
    Возьмите входные данные, умножьте на вес (просто используйте случайные числа в качестве весов)
    Пусть Y = W i I i = W 1 I 1 + W 2 I 2 + W 3 I 3
    Передайте результат через сигмовидную формулу, чтобы рассчитать выход нейрона. Функция Sigmoid используется для нормализации результата между 0 и 1:
    1/1 + е -y
  2. Обратное распространение
    Вычислите ошибку, т.е. разницу между фактическим и ожидаемым выходом. В зависимости от ошибки, отрегулируйте веса, умножив ошибку на вход и снова на градиент сигмоидальной кривой:
    Weight + = Ошибка ввода-вывода (1-выход), здесь выход (1-выход) является производной сигмоидальной кривой.

Примечание. Повторите весь процесс несколько тысяч итераций.

Давайте закодируем весь процесс на Python. Мы будем использовать библиотеку Numpy, чтобы облегчить нам все вычисления на матрицах. Вам нужно установить библиотеку NumPy в вашей системе, чтобы запустить код
Команда для установки numpy:

 sudo apt -get install python-numpy

Реализация:

from numpy import *

  

class NeuralNet(object):

    def __init__(self):

        # Генерация случайных чисел

        random.seed(1)

  

        # Присвоить случайные веса матрице 3 x 1,

        self.synaptic_weights = 2 * random.random((3, 1)) - 1

  

    # Сигмовидная функция

    def __sigmoid(self, x):

        return 1 / (1 + exp(-x))

  

    # Производная сигмоидной функции.

    # Это градиент сигмовидной кривой.

    def __sigmoid_derivative(self, x):

        return x * (1 - x)

  

    # Тренируйте нейронную сеть и корректируйте веса каждый раз.

    def train(self, inputs, outputs, training_iterations):

        for iteration in xrange(training_iterations):

  

            # Пройдите обучение через сеть.

            output = self.learn(inputs)

  

            # Рассчитать ошибку

            error = outputs - output

  

            # Отрегулируйте весовые коэффициенты

            factor = dot(inputs.T, error * self.__sigmoid_derivative(output))

            self.synaptic_weights += factor

  

    # Нейронная сеть думает.

    def learn(self, inputs):

        return self.__sigmoid(dot(inputs, self.synaptic_weights))

  

if __name__ == "__main__":

  

    #initialize

    neural_network = NeuralNet()

  

    # Учебный комплект.

    inputs = array([[0, 1, 1], [1, 0, 0], [1, 0, 1]])

    outputs = array([[1, 0, 1]]).T

  

    # Тренируй нейронную сеть

    neural_network.train(inputs, outputs, 10000)

  

    # Тестирование нейронной сети на тестовом примере.

    print neural_network.learn(array([1, 0, 1]))

Ожидаемый результат: после 10 итераций наша нейронная сеть прогнозирует значение 0,65980921. Это выглядит не очень хорошо, так как ответ должен быть 1. Если мы увеличим количество итераций до 100, мы получим 0.87680541. Наша сеть становится умнее! Впоследствии, для 10000 итераций мы получаем 0,9897704, что довольно близко и действительно удовлетворительный результат.

Ссылки:

Эта статья предоставлена Vivek Pal . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Реализация процесса обучения искусственной нейронной сети на Python

0.00 (0%) 0 votes