Шрифт:
А что если, наш обученный нейрон смог бы правильно отвечать на вводимые пользователем данные? Если задать условие, что всё что выше красной линии относится к виду – жирафов, а ниже к виду – крокодилов:
x = input("Введите значение ширины Х: ")
x = int(x)
T = input("Введите значение высоты Y: ")
T = int(T)
y = A * x
# Условие
if T > y:
print('Это жираф!')
else:
print('Это крокодил!')
Функция input – принимает значение, вводимое пользователем. А условие гласит: если целевое значение (вводимое пользователем) больше ответа на выходе нейрона (выше красной линии), то сообщаем что – это жираф, иначе сообщаем что – это крокодил.
После ввода наших значений, получаем ответ:
Введите значение ширины Х: 4
Введите значение высоты Y: 15
Это жираф!
Теперь мы можем поздравить себя! Вся наша работа стала сводиться к тому, чтоб просто подавать на вход нейрона данные, не разбираясь в них самостоятельно. Нейрон сам классифицирует их и даст правильный ответ.
Если бы наши действия на работе сводились к подобным классификациям, то у нас появилась бы куча времени на кофе, очень важных общений в социальных сетях, и даже останется время, чтоб разложить пасьянс. И при всем этом можно выполнять ещё больший объём работы, что конечно же должно вознаграждаться премиальными и повышением зарплаты.
ГЛАВА 4
Добавляем входной параметр
Теперь представим, что нам приходит новое задание. Где, проанализировав самостоятельно данные, мы видим, что их координаты значительно отличаются от прежних. Теперь провести классифицирующую прямую, обладая в своем арсенале лишь коэффициентом крутизны – не выйдет!
Очевидно, что без параметра b, которого мы до этого избегали (b=0), тут не обойтись.
Вспомним, что параметр b, в уравнении прямой y = Ax + b, как раз отвечает за точку её пересечения с осью Y. На графике выше, такая точка очевидно находится возле координаты – (x =0; y =11).
Для того, чтобы выполнить новое задание, придется добавить в наш нейрон, второй вход – отвечающий за параметр b.
Моделирование нейрона как линейного классификатора со всеми параметрами линейной функции
Определимся с параметром (b). Как будет выглядеть второй вход? Какие данные подавать в ходе обучения?
Параметр (b) – величина постоянная, поэтому мы добавим его на второй вход нейрона, с постоянным значением входного сигнала, равным единице (x2 = 1). Таким образом, произведение этого входа на значение величины (b), всегда будет равно значению самой величины (b).
Пришло время для первого эволюционного изменения структуры нашего нейрона!
Рассмотрим следующую графическую модель искусственного нейрона:
Где, как говорилось выше, на вход нейрона поступают два входных сигнала x (из нашего набора данных) и x2 = 1. После чего, эти значения умножаются со своими изменяемыми параметрами, а далее они суммируются: A*x+b*x2. Значение этой суммы, а по совместительству – значение функции y = A*x+b*x2 = A*x+b, поступает на выход.
Ну и давайте всё представим согласно тем принятым условным обозначениям, которые используются при моделировании искусственных нейронов и нейронных сетей. А именно – коэффициент А и параметр b, обозначим как w1 и w2 соответственно. И теперь будем их называть – весовыми коэффициентами.
Ну и конечно же, визуализируем структуру нашего нейрона, с новыми обозначениями:
Переименуем в нашей первой программе коэффициент (А) и параметр (b), на обозначения весовых коэффициентов, как показано на слайде. Инициализируем их в ней. Дополним небольшую её часть в области с обучением, формулой изменения веса (w2), как мы это делали ранее с коэффициентом (А).
После чего, область с обучением в программе, будет выглядеть следующим образом:
# Прогон по выборке
for e in range(epochs):