Рубрики
Без рубрики

Строительство единой нервной сети PercePtron

Добро пожаловать. Сегодня мы собираемся покрыть, как построить базовую неверную нейронную сеть PercePtron. Я хочу сделать это первым из серии статей, в которых мы углубляемся во все – CNNS, обучение для передачи и т. Д. Так что обязательно вкладывайте сайт и продолжайте проверять его. Кроме того, это будет включать много математики, поэтому ремень.

Автор оригинала: Pankaj Kumar.

Строительство единой нервной сети PercePtron

Добро пожаловать. Сегодня мы собираемся покрыть, как построить базовую неверную нейронную сеть PercePtron.

Я хочу сделать это первым из серии статей, в которых мы углубляемся во все – CNNS, обучение для передачи и т. Д. Так что обязательно вкладывайте сайт и продолжайте проверять его. Кроме того, это будет включать в себя немного математики, поэтому ремень в.

Что такое перцептрон?

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

На данный момент, что такое перцептрон?

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

Линейно разделимые образцы набора данных

Последний нельзя считать линейно отделенным, потому что это не одна строка, которая может примерно отделить базу данных.

Перцептрон

Строительство единой нервной сети PercePtron

Давайте перейдем к созданию нашей первой нейронной сети PercePtron сегодня. Для этого мы начнем с создания данных.

1. Создайте наш набор данных

Во-первых, нам нужен наш набор данных, который в нашем случае будет 2D-массив. Откройте свои редакторы кода, ноутбук Jupyter или Google Colab.

import pandas as pd
import numpy as np
import random

Давайте сделаем наши данные. Я рассматриваю самолет 20 * 20 в этом примере, чтобы сохранить наши результаты маленькими и лаконичными.

#Dataset
df = pd.DataFrame()
df['x'] = [random.randint(1,20) for x in range(10)]
df['y'] = [random.randint(1,20) for x in range(10)]
df.head()

Теперь нам нужно маркировать их. Итак, мы отфильтровали на основе линии (я рассмотрел). Таким образом, каждая точка ниже линии y x.

label=[]
for i in range(df.shape[0]):
  if df.iloc[i,0] < df.iloc[i,1]:
    label.append(1)
  else:
    label.append(-1)

df['label'] = label
df
DataSet с этикетками для моделей нервных сетей Perceptron

2. Инициализируйте веса для значений

Теперь мы можем инициализировать вес. Мы не можем использовать нулевое значение, поэтому мы просто пойдем с случайным равномерным распространением для весов:

#weights and bias
weights = [np.round(random.uniform(-0.99,0.99),2) for i in range(2)]

Тогда мы умножим веса с входными точками данных и сумма:

w = weights.copy()
X = [[df.iloc[i,0],df.iloc[i,1]] for i in range(df.shape[0])]
wx = [X[i][0]*w[0]+X[i][1]*w[1] for i in range(df.shape[0])]

Теперь у нас есть сумма весов и входов для каждой точки.

Так что такое процедура, заключается в том, что мы подключаемся все эти значения по одному в функцию активации, а затем на основе вывода мы изменим вес.

3. Создание функции активации

Теперь мы приходим к функции активации. PercePtron относится к сумме и дает нам метку, которую мы сравниваем с оригинальным ярлыком и определяем, правильно ли она. Если это неверно, обнаружена ошибка, и веса настраиваются так, чтобы наше решение * движется * В направлении оригинала.

Мы будем использовать функцию сигнала:

Если WX, то вывод равно 0. Иначе, выход 1.

for i in range(df.shape[0]):
  if wx[i]<=0:
    pred = 0
  else:
    pred = 1

Помните, у нас есть только два входа: x и y. Не весь датафарам. Итак, мы расширим эту функцию активации, чтобы забрать в один файл данных за раз, а затем найти ошибку, а затем настроить ошибку:

for i in range(df.shape[0]):
  if wx[i]<=0:
    pred = -1
  else:
    pred = 1
  if pred != df['label'][i] :
    err = df['label'][i] - pred
    w[0] = w[0] + err
    w[1] = w[1] + err

Это работает отлично сейчас. Чтобы ясно видеть выходы, мы поставим в кучу печатных заявлений:

for i in range(df.shape[0]):
  print('wx : ',wx[i])
  if wx[i]<=0:
    pred = -1
  else:
    pred = 1
  print('label=',df['label'][i])
  print('pred = ',pred)
  if pred != df['label'][i] :
    err = df['label'][i] - pred
    print('err',err)
    print('before', w[0],w[1])
    w[0] = w[0] + err
    w[1] = w[1] + err
    print('after',w[0],w[1])
  else:
    print('w_i', w[0],w[1])

И теперь, если мы запустим это:

Обновление весов Single Perceptron Neural Network

Простое утверждение форматирования печати дает нам последние весы.

Окончательные весы одиночный Perceptron Neural Network

4. Тестирование нашей модели в другой базе данных

Подобно тому, как мы сделали Tear-Test-Split, мы будем использовать другую базу данных для нашего тестирования здесь.

#Test Dataset
new_df = pd.DataFrame()
new_df['x'] = [random.randint(1,20) for x in range(100)]
new_df['y'] = [random.randint(1,20) for x in range(100)]
new_df.head()

Затем мы генерируем этикетки на основе линии, а сумму весов * входов:

label_text = []
for i in range(new_df.shape[0]):
  if new_df.iloc[i,0] < new_df.iloc[i,1]:
    label_text.append(1)
  else:
    label_text.append(-1)
new_wX = w[0]*new_df['x']+w[1]*new_df['y']

Вот мой:

Новый вес суммы Neural Net

Итак, теперь момент истины, мы применяем нашу функцию активации, а затем мы можем сравнить данные этикетки с прогнозируемыми метками:

new_df['given label'] = label_text
pred_label_text = []

for i in range(new_df.shape[0]):
  if new_wX[i]>=0:
    pred_label_text.append(-1)
  else:
    pred_label_text.append(1)

new_df['predicted labels'] = pred_label_text
Предсказанные этикетки для нового набора данных

Как видите, мы сделали довольно хорошо для себя 🙂

Заключение

Поздравляем с выполнением этого урока. Я надеюсь, что это дало вам много представления о «перцептрене». Оставайтесь на связи с нами, чтобы прочитать наши будущие учебные пособия.