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

Как обучить базовую нейронную сеть персептрона

В этой статье представлен код Python, который позволяет автоматически генерировать веса для простой нейронной сети.

Добро пожаловать в серию AAC о нейронных сетях Perceptron. Если вы хотите начать с самого начала или забегать вперед, ознакомьтесь с остальными статьями здесь:

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

Классификация с помощью однослойного персептрона

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

Это сеть, которую я разработал:

Функция активации в выходном узле - это единичный шаг:

\ [f (x) =\ begin {cases} 0 &x <0 \\ 1 &x \ geq 0 \ end {cases} \]

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

В оставшейся части статьи мы рассмотрим код Python, который я использовал для получения этих весов.

Нейронная сеть Python

Вот код:

 импорт панд импортировать numpy как np input_dim =3 Learning_rate =0,01 Веса =np.random.rand (input_dim) #Weights [0] =0,5 #Weights [1] =0,5 #Weights [2] =0,5 Training_Data =pandas.read_excel ("3D_data.xlsx") Expected_Output =Training_Data.output Training_Data =Training_Data.drop (['вывод'], ось =1) Training_Data =np.asarray (тренировочные_данные) training_count =len (Тренировочные_Данные [:, 0]) для эпохи в диапазоне (0,5):для данных в диапазоне (0, training_count):Output_Sum =np.sum (np.multiply (Training_Data [данные ,:], веса)) если Output_Sum <0:Output_Value =0 еще:Output_Value =1 error =Expected_Output [datum] - Output_Value для n в диапазоне (0, input_dim):Вес [n] =Вес [n] + скорость_обучения * ошибка * Данные_обучения [данные, n] print ("w_0 =% .3f"% (Вес [0])) print ("w_1 =% .3f"% (Вес [1])) print ("w_2 =% .3f"% (Вес [2])) 

Давайте подробнее рассмотрим эти инструкции.

Настройка сети и организация данных

 input_dim =3 

Размерность регулируется. Наши входные данные, если вы помните, состоят из трехмерных координат, поэтому нам нужно три входных узла. Эта программа не поддерживает несколько узлов вывода, но мы добавим настраиваемую размерность вывода в будущий эксперимент.

 learning_rate =0,01 

Мы обсудим скорость обучения в следующей статье.

 Вес =np.random.rand (input_dim) #Weights [0] =0,5 #Weights [1] =0,5 #Weights [2] =0,5 

Веса обычно инициализируются случайными значениями. Функция numpy random.rand () генерирует массив длиной input_dim заполняется случайными значениями, распределенными в интервале [0, 1). Однако начальные значения веса влияют на окончательные значения веса, полученные в процессе обучения, поэтому, если вы хотите оценить влияние других переменных (таких как размер обучающей выборки или скорость обучения), вы можете удалить этот мешающий фактор, установив все веса к известной константе вместо случайно сгенерированного числа.

 Training_Data =pandas.read_excel ("3D_data.xlsx") 

Я использую библиотеку pandas для импорта данных обучения из электронной таблицы Excel. В следующей статье мы рассмотрим данные обучения более подробно.

 Expected_Output =Training_Data.output Training_Data =Training_Data.drop (['вывод'], ось =1) 

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

 Training_Data =np.asarray (Training_Data) training_count =len (Training_Data [:, 0]) 

Я конвертирую набор данных для обучения, который в настоящее время представляет собой структуру данных pandas, в массив numpy, а затем смотрю на длину одного из столбцов, чтобы определить, сколько точек данных доступно для обучения.

Расчет выходных значений

 для эпохи в диапазоне (0,5):

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

 для данных в диапазоне (0, обучение_count):

Процедура, содержащаяся в этом цикле, выполняется один раз для каждой строки в обучающем наборе, где «строка» относится к группе значений входных данных и соответствующему выходному значению (в нашем случае входная группа состоит из трех чисел, представляющих x, y , и компоненты z точки в трехмерном пространстве).

 Output_Sum =np.sum (np.multiply (Training_Data [данные ,:], веса)) 

Выходной узел должен суммировать значения, предоставленные тремя входными узлами. Моя реализация Python делает это, сначала выполняя поэлементное умножение массива Training_Data и веса array, а затем вычислить сумму элементов в массиве, полученном в результате этого умножения.

, если Output_Sum <0:Output_Value =0 еще:Output_Value =1 

Оператор if-else применяет функцию активации единичного шага:если сумма меньше нуля, значение, генерируемое выходным узлом, равно 0; если суммирование равно или больше нуля, выходное значение равно единице.

Обновление веса

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

\ [w_ {new} =w + (\ alpha \ times (output_ {ожидаемый} -output_ {вычисленный}) \ times input) \]

Символ \ (\ alpha \) обозначает скорость обучения. Таким образом, чтобы вычислить новое значение веса, мы умножаем соответствующее входное значение на скорость обучения и на разницу между ожидаемым выходом (который предоставляется обучающим набором) и вычисленным выходом, а затем добавляем результат этого умножения. к текущему значению веса. Если мы определим дельту ( \ (\ delta \) ) как (\ (output_ {ожидаемый} - output_ {вычисленный} \)), мы можем переписать это как

\ [w_ {new} =w + (\ alpha \ times \ delta \ times input) \]

Вот как я реализовал правило обучения в Python:

 error =Expected_Output [datum] - Output_Value для n в диапазоне (0, input_dim):Вес [n] =Вес [n] + скорость_обучения * ошибка * Данные_обучения [данные, n] 

Заключение

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


Встроенный

  1. Базовая система обнаружения вторжений
  2. Как стать автоэлектриком
  3. Как усилить защиту ваших устройств для предотвращения кибератак
  4. Как обучить алгоритм для обнаружения и предотвращения ранней слепоты
  5. CEVA:AI-процессор второго поколения для глубоких рабочих нагрузок нейронных сетей
  6. Базовый IoT - RaspberryPI HDC2010 как
  7. Что такое ключ безопасности сети? Как его найти?
  8. 5 основных советов по сетевой безопасности для малого бизнеса
  9. Насколько безопасна сеть вашего цеха?
  10. Как индустрия 4.0 обучает рабочую силу завтрашнего дня?