Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Equipment >> Промышленный робот

Как создать многослойную нейронную сеть персептрона в Python

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

Это 12-я статья в серии разработки нейронных сетей AAC. Посмотрите, что еще предлагает серия ниже:

  1. Как выполнить классификацию с помощью нейронной сети:что такое перцептрон?
  2. Как использовать простой пример нейронной сети персептрона для классификации данных
  3. Как обучить базовую нейронную сеть персептрона
  4. Общие сведения об обучении простой нейронной сети
  5. Введение в теорию обучения нейронных сетей.
  6. Скорость обучения в нейронных сетях
  7. Расширенное машинное обучение с многоуровневым персептроном
  8. Функция активации сигмовидной кишки:активация в многослойных перцептронных нейронных сетях.
  9. Как обучить многослойную нейронную сеть персептрона
  10. Понимание формул обучения и обратного распространения ошибки для многослойных персептронов
  11. Архитектура нейронной сети для реализации Python
  12. Как создать многослойную нейронную сеть персептрона на Python.
  13. Обработка сигналов с использованием нейронных сетей:проверка при проектировании нейронных сетей
  14. Обучающие наборы данных для нейронных сетей:как обучить и проверить нейронную сеть Python

В этой статье мы рассмотрим работу, которую мы проделали с нейронными сетями Perceptron, и узнаем, как реализовать ее на знакомом языке:Python.

Разработка понятного кода Python для нейронных сетей

Недавно я просмотрел довольно много онлайн-ресурсов по нейронным сетям, и, хотя там, несомненно, есть много полезной информации, я не был удовлетворен программными реализациями, которые я нашел. Они всегда были слишком сложными, или слишком сложными, или недостаточно интуитивно понятными. Когда я писал свою нейронную сеть Python, я действительно хотел сделать что-то, что могло бы помочь людям узнать о том, как работает система и как теория нейронных сетей преобразуется в программные инструкции.

Однако иногда существует обратная зависимость между ясностью кода и эффективностью кода. Программа, которую мы обсудим в этой статье, определенно не оптимизирован для быстрой работы. Оптимизация - серьезная проблема в области нейронных сетей; реальные приложения могут потребовать огромного количества обучения, и, следовательно, тщательная оптимизация может привести к значительному сокращению времени обработки. Однако для простых экспериментов, подобных тем, которые мы будем проводить, обучение не займет много времени, и нет причин беспокоиться о методах программирования, которые предпочитают простоту и понимание скорости.

Вся программа Python включена в виде изображения в конце этой статьи, а файл («MLP_v1.py») предоставляется для загрузки. Код выполняет как обучение, так и проверку; В этой статье основное внимание уделяется обучению, а о валидации мы поговорим позже. В любом случае, однако, в части проверки не так много функций, которые не рассматриваются в части обучения.

Обдумывая код, вы, возможно, захотите снова взглянуть на немного ошеломляющую, но очень информативную диаграмму «архитектура плюс терминология», которую я привел в Части 10.


Подготовка функций и переменных

Библиотека NumPy широко используется для сетевых вычислений, а библиотека Pandas дает мне удобный способ импортировать данные обучения из файла Excel.

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

Затем мы выбираем скорость обучения, размерность входного слоя, размерность скрытого слоя и количество эпох. Обучение в несколько эпох важно для реальных нейронных сетей, потому что оно позволяет извлечь больше знаний из данных обучения. Когда вы генерируете обучающие данные в Excel, вам не нужно запускать несколько эпох, потому что вы можете легко создать больше обучающих выборок.

Функция np.random.uniform () Функция заполняет наши две весовые матрицы случайными значениями от –1 до +1. (Обратите внимание, что матрица скрытого вывода на самом деле является просто массивом, потому что у нас есть только один выходной узел.) np.random.seed (1) оператор заставляет случайные значения быть одинаковыми каждый раз, когда вы запускаете программу. Начальные значения веса могут существенно повлиять на конечную производительность обученной сети, поэтому, если вы пытаетесь оценить, насколько другие переменные улучшают или снижают производительность, вы можете раскомментировать эту инструкцию и тем самым исключить влияние инициализации случайного веса.

Наконец, я создаю пустые массивы для значений предварительной и постактивации в скрытом слое.

Импорт данных обучения

Это та же процедура, которую я использовал в части 4. Я импортирую данные обучения из Excel, отделяю целевые значения в столбце «выход», удаляю столбец «выход», конвертирую данные обучения в матрицу NumPy и сохраняю количество обучающих выборок в training_count переменная.

Обработка с прогнозированием

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


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

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

Обратное распространение

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

Здесь у нас есть два слоя циклов for:один для весов, скрытых для вывода, и один для весов, от входных до скрытых. Сначала мы генерируем S ERROR , который нам нужен для расчета как градиента HtoO и градиент ItoH , а затем мы обновляем веса, вычитая градиент, умноженный на скорость обучения.

Обратите внимание на то, как веса «вводимые данные - скрытые» обновляются внутри цикл скрытого вывода. Мы начинаем с сигнала ошибки, который ведет обратно к одному из скрытых узлов, затем распространяем этот сигнал ошибки на все входные узлы, которые связаны с этим одним скрытым узлом:


После того, как все веса (как ItoH, так и HtoO), связанные с этим одним скрытым узлом, были обновлены, мы возвращаемся в цикл и снова начинаем со следующего скрытого узла.

Также обратите внимание, что веса ItoH изменяются до весов HtoO. Мы используем текущий вес HtoO при вычислении градиента ItoH , поэтому мы не хотим изменять веса HtoO до выполнения этого расчета.

Заключение

Интересно подумать о том, сколько теории было вложено в эту относительно короткую программу на Python. Я надеюсь, что этот код поможет вам действительно понять, как мы можем реализовать многослойную нейронную сеть Perceptron в программном обеспечении.

Вы можете найти мой полный код ниже:

Загрузить код


Промышленный робот

  1. Как создать шаблон CloudFormation с помощью AWS
  2. Как создать облачный центр передового опыта?
  3. Как создать UX без трения
  4. Как создать список строк в VHDL
  5. Как создать самопроверяющийся тестовый стенд
  6. Как создать таймер в VHDL
  7. Как создать синхронизированный процесс в VHDL
  8. Понимание локальных минимумов в обучении нейронной сети
  9. Как создать массив объектов в Java
  10. Python — сетевое программирование