Читаем Нейронный сети. Эволюция полностью

arr_y = [4.3, 7, 8.0, 10.1, 11.3, 14.2, 18.5, 19.3, 21.4]

# Прогон по выборке

for e in range(epochs):

for i in range(len(arr_x1)): # len(arr) – функция возвращает длину массива

# Получить x координату точки

x1 = arr_x1[i]


# Получить расчетную y, координату точки

y = w1 * x1 + w2


# Получить целевую Y, координату точки

target_Y = arr_y[i]


# Ошибка E = -(целевое значение – выход нейрона)

E = – (target_Y – y)


# Меняем вес при x, в соответствии с правилом обновления веса

w1 -= lr * E * x1


# Меняем вес при x2 = 1

#w2 -= rate * E * x2 # Т.к. x2 = 1, то этот множитель можно не писать

w2 -= lr * E


# Вывод данных готовой прямой

print('Готовая прямая: ', w1, '* X + ', w2)

Данный код, как и все другие, вы можете скачать по ссылке: https://github.com/CaniaCan/neuralmaster

Опишем код программы:

В самом начале программы импортируем модуль для работы со случайными числами:

import random

При помощи которого, случайным числом, создаем весовой коэффициент параметра (w2 = b) – отвечающий за точку прохождения прямой через ос Y:

w2 = random.uniform(-4, 4)

Метод модуля random – uniform(from, to), генерирует случайное вещественное число от from до to включительно.

В нашей программе, как видно, не так много изменений, по сравнению с той что мы написали до этого. Мы добавили второй вход (х2 = 1), со своим весовым коэффициентом (w2). Коэффициент (А) – переименовали в весовой коэффициент (w1), параметр (b) – в весовой коэффициент (w2). Ну и конечно же, реализовали новую улучшенную функцию ошибки, и обновление весовых коэффициентов по методу градиентного спуска.

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

Давайте взглянем на результат чтобы убедиться в этом:

Начальная прямая: 0.4 * X + 0.3652477754014445


Готовая прямая: 2.058410130422831 * X + 2.5013583972057263




Вы видите! Как наш искусственный нейрон прекрасно справляется с задачей. Даже еле различимые на глаз данные, он легко смог линейно разделить.

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

x1 = input("Введите значение ширины Х: ")

x1 = int(x1)

T = input("Введите значение высоты Y: ")

T = int(T)

y = w1 * x1 + w2


# Условие

if T > y:

print('Это жираф!')

else:

print('Это крокодил!')

После ввода наших значений, следует условие, которое проверяет, какого вида эти данные, жирафы или крокодилы, и возвращает ответ на поставленный вопрос.

Введите значение ширины Х: 4

Введите значение высоты Y: 15

Это жираф!


Резюмируя проделанную работу:

Получив задание, классифицировать два вида животных, по параметрам, определяющим размеры их тела, с некоторой выборкой данных (значений и ответов), мы смогли запрограммировать искусственный нейрон, основываясь на элементарных знаниях математики, а именно линейной функции, проходящей через начало координат (y = Ax). Определив, что, данные лежащие выше прямой относились бы к одному классу, а все точки данных лежащих ниже – к другим. Тем самым мы лишили бы себя утомительной работы по самостоятельному анализу полученных данных, для классификации их на два вида. Говоря иными словами, мы доверили этот процесс искусственному нейрону, который мы создали на основе знания линейного классификатора. Теперь нейрон самостоятельно классифицирует все данные поступившие на его единственный вход. Более того, после процесса обучения, с обученным коэффициентом (А), мы легко можем задать условие, которое по вводимым пользователем значениям, определяло, к какому виду они принадлежат.

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

Но биологическая, как и цифровая, природа, не столь однообразна. До этого мы рассматривали “тепличные данные” – (y = Ax). Данные – которые мы могли классифицировать, имея лишь один вход. Во многих случаях классификации обойтись одним коэффициентом (А), линейной функции, невозможно, приходится использовать весь спектр возможности линейной функции. Для использования этих дополнительных возможностей, необходимо эволюционировать искусственный нейрон, добавив к нему еще один вход.

Добавив на второй вход параметр (b), отвечающий за точку прохождения прямой через ось Y, в качестве обучаемого коэффициента, мы получаем весь арсенал возможностей линейной функции (y = Ax+b) при классификации.

Перейти на страницу:

Похожие книги

Чем женщина отличается от человека
Чем женщина отличается от человека

Я – враг народа.Не всего, правда, а примерно половины. Точнее, 53-х процентов – столько в народе женщин.О том, что я враг женского народа, я узнал совершенно случайно – наткнулся в интернете на статью одной возмущенной феминистки. Эта дама (кандидат филологических наук, между прочим) написала большой трактат об ужасном вербальном угнетении нами, проклятыми мужчинами, их – нежных, хрупких теток. Мы угнетаем их, помимо всего прочего, еще и посредством средств массовой информации…«Никонов говорит с женщинами языком вражды. Разжигает… Является типичным примером… Обзывается… Надсмехается… Демонизирует женщин… Обвиняет феминизм в том, что тот "покушается на почти подсознательную протипическую систему ценностей…"»Да, вот такой я страшный! Вот такой я ужасный враг феминизма на Земле!

Александр Петрович Никонов

Публицистика / Прочая научная литература / Образование и наука / Документальное
Введение в логику и научный метод
Введение в логику и научный метод

На протяжении десятилетий эта книга служила основным учебником по логике и научному методу в большинстве американских вузов и до сих пор пользуется спросом (последнее переиздание на английском языке увидело свет в 2007 г.). Авторам удалось органично совместить силлогистику Аристотеля с формализованным языком математической логики, а методология познания излагается ими в тесной связи с логикой. Освещаются все стандартные темы, преподаваемые в базовом курсе по логике, при этом их изложение является более подробным, чем в стандартных учебниках. Как синтетический курс логики и научной методологии не имеет аналога среди отечественных учебников.Значительная часть книги посвящена исследованию проблем прикладной логики: экспериментальным исследованиям, индукции, статистическим методам, анализу оценочных суждений.В книге дается анализ предмета логики и природы научного метода, рассмотрение той роли, которую методы логики играют в научном познании, а также критика многих альтернативных подходов к истолкованию логики и науки в целом. В этом отношении она представляет собой самостоятельное философское произведение и будет интересна специалистам в области философии и методологии науки.Для преподавателей логики, философии науки, теории аргументации и концепций современного естествознания, студентов, изучающих логику и методологию науки.

Моррис Коэн , Эрнест Нагель

Философия / Прочая научная литература / Образование и наука