В этой работе я буду создавать базовую нейронную сеть, используя только библиотеку Python NumPy.
Шаг 1:
Давайте сначала создадим наши независимые переменные или входной набор функций и соответствующую зависимую переменную или метки.
input_set = np.array ([[0,1,0],
[0,0,1],
[1,0,0],
[1,1,0],
[1,1,1],
[0,1,1],
[0,1,0]])
#зависимая переменная
label = np.array ([[1,
0,
0,
1,
1,
0,
1]])
label = labels.reshape (7,1) # преобразовать надписи в векторные
Шаг 2:
Определить гиперпараметры; мы будем использовать функцию numpy random.seed, чтобы мы могли получать одни и те же случайные значения всякий раз, когда выполняем код.
np.random.seed (42)
веса = np.random.rand (3,1)
bias = np.random.rand (1)
lr = 0,05 # скорость обучения
Шаг 3:
Определите функцию активации и ее производную: наша функция активации - это сигмоидальная функция.
def sigmoid (x): # сигмовидная функция
возврат 1 / (1 + np.exp (-x))
def sigmoid_derivative (x): # производная сигмоидной функции
вернуть сигмовидную (x) * (1-сигмовидную (x))
Шаг 4:
Пришло время обучить нашу модель ИНС, мы обучим алгоритм на наших данных 25 000 раз, так что наши эпохи будут 25 000.
для эпохи в диапазоне (25000):
input = input_set
XW = np.dot (входные данные, веса) + смещение
z = сигмовидная (XW)
error = z - метки
печать (error.sum ())
dcost = ошибка
dpred = sigmoid_derivative (z)
z_del = dcost * dpred
input = input_set.T
веса = веса - lr * np.dot (входы, z_del)
для числа в z_del:
bias = bias - lr * num
Шаг 5:
Сделайте прогнозы; пришло время сделать некоторые прогнозы. Давай попробуем с [1,0,0]
single_pt = np.array ([1,0,0])
результат = сигмоид (np.dot (single_pt, weights) + bias)
печать (результат)
# output = [0,02262959]
Как видите, вывод ближе к 0, чем к 1, поэтому он классифицируется как 0. Давайте попробуем еще раз с [0,1,0]
single_pt = np.array ([0,1,0])
результат = сигмоид (np.dot (single_pt, weights) + bias)
печать (результат)
# output = [0.98778682]
Как видите, результат ближе к 1, чем к 0, поэтому он классифицируется как 1.
Недостаток данной модели:
Разработанная ИНС не сможет классифицировать нелинейно разделимые данные.