Разбор простейший структуры нейросети и пишем свою нейросеть на python
ⅅ卂尺ҠᎶ卂爪乇尺
Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию.
В этой статье мы будем использовать простейшую нейросеть прямого распространения, она будет иметь 3 входа и 1 выход.

Можно использовать 2+ входных нейронов (1 бессмысленно использовать), в этой статье мы будем использовать 3 и 5 входных нейронов.
Для начала, немного теории
Как нейронная сеть вообще может думать?
Все дело в синапсах, именно они определяют будет нейрон активен или нет.
Синапс это связь между двумя нейронами. У синапсов есть 1 параметр - вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне.

Выходной нейрон выдает от 0 до 1, либо от -1 до 1, в зависимости какую вы формулу выберете, мы будем использовать формулу сигмоид (0,1).
Формулы по которым идут расчёты
Первая это сумма перемноженых входных данных на их веса (x1*w1+x2*w2+x3*w3), далее нужно пропустить ответ через функцию активации.
Вторая это функция активации, она служит для адаптация ответа в пригодное число, формула (1/1+e^-x).
Пишем простую нейросеть на python
Для начала определимся что она должна делать.
Имеем следующие данные:
[0,0,1] = 0 [1,0,1] = 1 [1,1,1] = 1 [0,1,1] = ?
Не сложно догадаться что ответ будет 0 т.к. первое число всегда ответ, сделаем так чтобы нейросеть сама догадалась до этого.
Импортируем нужный модуль для математических вычислений.
from numpy import exp, array, random, dot
Далее создадим класс нейросети и напишем функцию генерации случайного веса.
class Network():
#при инициализации класса создаются случайные веса
def __init__(self):
#сид для случайной генерации
random.seed(1)
#случайный вес
self.scales = 2 * random.random((3,1))
Далее создадим 2 функции сигмоид, одна для нейрона, другая для подсчета ошибки.
def __sigmoid(self,x):
return 1/(1+exp(-x))
def __err_sigmoid(self,x):
return x*(1-x)
Так же нужна функция которая будет "думать".
def think(self,inputs):
return self.__sigmoid(dot(inputs, self.scales))
Ну и функция обучения нашей нейросети.
def train(self, input, output, epochs):
for iteration in range(epochs):
print("\rЭпоха - "+str(iteration), end="")
#результат нейросети
out = self.think(inputs)
#подсчет ошибки
error = output - out
adjustment = dot(inputs.T, error * self.__err_sigmoid(output))
self.scales += adjustment
Нейросеть готова, теперь ее можно использовать, для начала нам понадобятся тренеровочные данные, давайте возьмем те что были в начале.
train_inputs=[ [0,0,1], [1,0,1], [1,1,1] ]
Теперь ответы на данные задачи.
train_outputs=[ [0,1,1] ]
Инициализируем класс нейросети и обучим ее.
net=Network()
#выведем случайные весы
print("Веса до обучения: "+net.scales)
#обучим нейросеть используя 10000 эпох (это быстро)
net.train(train_inputs,train_outputs,10001)
#выведем вес после обучения
print("Веса после обучения: "+net.scales)
#теперь напишем вывод ответа в 1 или 0 для задачи [0,1,1]
print("Ответ на [0,1,1] - "+(1 if net.think(array([0,1,1])>0.5 else 0))

Как видите нейросеть научилась выполнять эту задачу (после обучения нужно заменить случайные веса на те что после обучения и убрать обучение).
Вот так легко создать свою нейросеть на python, чтобы понять больше как все работает поиграйтесь с кодом, вот что получилось написать мне за 10 минут:

Девушка (нейросеть) выбирает себе парня по критериям, при этом после обучения на примерах нейросеть сама определила что главный критерий это красота.
👤Автор статьи и админ канала -> t.me/mozahist228
👤Создатель канала -> t.me/Enleann
☣️На чат -> t.me/termuxpub