Создание нейронной сети на языке Python с нуля




Давайте создадим нейронную сеть Python самостоятельно, без использования нейросетевых фреймворков. Мы воспользуемся знаниями линейной алгебры, чтобы понять, как работает вывод в полносвязных слоях. Затем мы реализуем это на Python и решим простую задачу классификации. На канале Дмитрия Коробченко вы найдете много интересного контента, поэтому подписывайтесь и не забудьте включить уведомления. Видео содержит код и много полезной информации по нейросетям, глубокому обучению, машинному обучению, искусственному интеллекту, Python и библиотеке Numpy.


Нейронные сети являются одним из ключевых инструментов в области искусственного интеллекта. Они способны обрабатывать сложные данные и выполнять задачи обучения и классификации. В данной статье мы рассмотрим создание и обучение нейронной сети на языке Python с нуля.

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

Для создания нейронной сети на Python нам понадобятся следующие библиотеки: NumPy и Matplotlib. NumPy предоставляет нам инструменты для работы с массивами и математическими операциями, а Matplotlib поможет нам визуализировать результаты.

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

«`
import numpy as np

class NeuralNetwork:
def __init__(self, input_nodes, hidden_nodes, output_nodes):
self.input_nodes = input_nodes
self.hidden_nodes = hidden_nodes
self.output_nodes = output_nodes
# инициализация весовых коэффициентов случайными значениями
self.weights_ih = np.random.randn(self.hidden_nodes, self.input_nodes)
self.weights_ho = np.random.randn(self.output_nodes, self.hidden_nodes)
«`

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

«`
def sigmoid(x):
return 1 / (1 + np.exp(-x))
«`

После этого, определим функцию «feedforward», которая выполнит передачу сигнала через сеть. Метод примет список входных значений и вернет выходной сигнал.

«`
def feedforward(self, inputs):
# преобразование списка входных значений в двумерный массив
inputs = np.array(inputs, ndmin=2).T
# вычисление скрытого слоя
hidden = sigmoid(np.dot(self.weights_ih, inputs))
# вычисление выходного слоя
outputs = sigmoid(np.dot(self.weights_ho, hidden))
return outputs
«`

Теперь реализуем обратное распространение ошибки для обновления весовых коэффициентов нашей сети. Для этого определим метод «train», который будет принимать входные и выходные данные для обучения.

«`
def train(self, inputs, targets, learning_rate):
# преобразование списков входных и выходных значений в двумерные массивы
inputs = np.array(inputs, ndmin=2).T
targets = np.array(targets, ndmin=2).T
# вычисление скрытого слоя
hidden = sigmoid(np.dot(self.weights_ih, inputs))
# вычисление выходного слоя
outputs = sigmoid(np.dot(self.weights_ho, hidden))
# вычисление ошибки
output_errors = targets — outputs
# обновление весовых коэффициентов
self.weights_ho += learning_rate * np.dot((output_errors * outputs * (1 — outputs)), hidden.T)
hidden_errors = np.dot(self.weights_ho.T, output_errors)
self.weights_ih += learning_rate * np.dot((hidden_errors * hidden * (1 — hidden)), inputs.T)
«`

Наконец, создадим экземпляр нашего класса и выполним обучение на некоторых тренировочных данных.

«`
# создание экземпляра нейронной сети
input_nodes = 2
hidden_nodes = 3
output_nodes = 1
nn = NeuralNetwork(input_nodes, hidden_nodes, output_nodes)

# тренировка нейронной сети
inputs = [[0, 0], [0, 1], [1, 0], [1, 1]]
targets = [[0], [1], [1], [0]]
learning_rate = 0.1
epochs = 10000
for i in range(epochs):
random_index = np.random.randint(len(inputs))
nn.train(inputs[random_index], targets[random_index], learning_rate)

# тестирование нейронной сети
test_input = [0, 1]
print(nn.feedforward(test_input))
«`

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

В данной статье мы рассмотрели создание и обучение нейронной сети на языке Python с использованием библиотек NumPy и Matplotlib. Нейронные сети имеют широкий спектр применений, от распознавания образов до прогнозирования результатов. Изучение этой мощной технологии может помочь вам реализовать решения сложных задач и повысить точность ваших моделей машинного обучения.


Опубликовано

в

от

Метки:

Комментарии

49 комментариев на ««Создание нейронной сети на языке Python с нуля»»

  1. Аватар пользователя Дмитрий Коробченко

    Рекомендуемый порядок просмотра:

    1. Нейронные сети за 10 минут: https://www.youtube.com/watch?v=GT6imQDxqko

    2. Как обучить нейронную сеть: https://www.youtube.com/watch?v=uWd9nyn0ql8

    3. Нейронная сеть на Python с нуля: https://www.youtube.com/watch?v=xMz7XSaqdRA

    4. Обратное распространение ошибки: https://www.youtube.com/watch?v=bW4dKxtUFpg

    5. Обучение нейронной сети на Python: https://www.youtube.com/watch?v=bXGBeRzM87g

  2. Аватар пользователя Дмитрий Карпухин

    Боже, что за топ, я не могу остановится! Продолжай!! Ааа я твой фанат!

  3. Аватар пользователя Paul Egorov

    Вот бы такую постоянную рубрику)

  4. Аватар пользователя BikutaPankeki

    Огромное спасибо. Залез в эту тему и никаких нормальных гайдов не находил. Ютуб посоветовал ваши ролики) Прям все доступно и понятно объясняете.

  5. Аватар пользователя Саша Тардова

    Подача и объяснение просто чудо, гигантское спасибо!!!

  6. Аватар пользователя Aesthetic Studios (Dance)

    А для совсем новеньких есть видео?

  7. Аватар пользователя Viktor Andreev

    Только что на Datacamp ирисы классифицировал, зашел сюда, тоже ирисы… интересно…

  8. Аватар пользователя mr. sure

    Дмитрий порекомендуй курсы-школу для начала обучения по нейронным сетям. Что-то типа нетоло или фактори япрактика…Интересно твое мнение по данному вопросу.

  9. Аватар пользователя Руслан Купрюхин

    судя по лицу в начале — не получилось, очень жаль, пойду посмотрю другой источник

  10. Аватар пользователя Sytylui Pes

    здравствуйте программисты из мгсу

  11. Аватар пользователя Dezmond

    Спасибо! Это очень интересно!

  12. Аватар пользователя Натали Васильева

    Классный ролик, очень интересно, но мне ничего не понятно. Завидую программистам.

  13. Аватар пользователя аза tv

    какой же ты ахуенный Дима!!!!
    не бросай это дело с нейронками, я хочу больше !!!!!!!!

  14. Аватар пользователя Margaret Jet

    Очень плохо, для новичков ваше видео совершенно не подходит, ничего не понятно. Нашла отличное видео, которое буквально на пальцах и конкретном примере объясняет эту тему. Кому интересно, делюсь https://www.youtube.com/watch?v=VqChpNNYZ8Q&t=517s

  15. Аватар пользователя Alexandr Vasilich

    8:39 Не знал, что-ж, лайк

  16. Аватар пользователя Павел Климов

    Блин, очень крутой ролик (и шутки, и подача, монтаж). Жаль автор ведет канал неактивно (

  17. Аватар пользователя Максим Курмышов

    Не совсем понятен один момент, в данном случае у автора матрицы нормально перемножаются, однако у меня с теми же параметрами операция перемножения постоянно норовит скинуть ошибку о том, что матрицы не такой размерности, какой должны быть, при изменении input, out и H_DIM ситуация не сильно-то меняется (можно, конечно, подогнать так, чтобы работало, но тогда нейронка не будет выполнять нужных мне действий). Возможно причина кроется в том, что с обновлениями что-то изменилось

  18. Аватар пользователя Алексей С.

    Отличный материал, Дмитрий! Браво!

  19. Аватар пользователя Clive Q

    Дмитрий, ты классный, хочу от тебя детей. Спасибо за доступное объяснение и качественные видео! Хоть и раз в несколько лет

  20. Аватар пользователя Clive Q

    Воу, мой лайк меняет значение с 4,4 тыс. на 4,5 тыс. Мощный лайк!

  21. Аватар пользователя inquisition

    Бля, такой бред. Что такое нейрон, что такое слой, что такое матрица, зачем их слаживать, что такое класс нейронов. Я нихуя не понял, честно…
    Не обижайся, дизлайк

  22. Аватар пользователя Павел Альшевский

    Где сам алгоритм и его реализация обучения сети !?????

  23. Аватар пользователя Глеб Сергеевич

    Здравствуйте, Дмитрий. Подскажите, пожалуйста, как вы обучили нейронную сеть? Откуда взяли веса?
    Спасибо!

  24. Аватар пользователя Animator 2D😃

    14:32 зачем его писать? У тебя же уже есть веса. Просто передай их себе же из прошлого. 🤣

  25. Аватар пользователя Kot  Parashutist

    чееего!? а всё понял(((

  26. Аватар пользователя ya Tochka

    нехуя не понятно, но очень интересно…

  27. Аватар пользователя David Shiko

    Тонкий стеб про будущее и дискету засчитан ))

  28. Аватар пользователя ПАША Т

    Почему у него так мало подписок ?????? людииии все на офигеном уровне монтаж особено

  29. Аватар пользователя Сергей

    У меня один очень важный вопрос, а дискету куда вставил?

  30. Аватар пользователя Ponty Pilat_0

    однозначно лайк. Отличный контент

  31. Аватар пользователя HELPER_В_ДЕЛЕ

    Жаль что вы забросили канал,вы то обьясняли классно,и анимация,монтаж всё было крутым

  32. Аватар пользователя Kacatka Syd

    чет отпало желание

  33. Аватар пользователя Pairika

    А можно то же самое объяснить семилетнему ребёнку, чтобы он понял и повторил?

  34. Аватар пользователя Михайло Двалі

    90 % видео:
    Наша простая нейросеть:
    import meganeironnetwork
    import functionsforneuronnetwork
    import neuronnetworksautocreator

  35. Аватар пользователя Илья

    А почему не писать класс нейрон?) я сразу захотел)))

  36. Аватар пользователя Lunichkin Oleg

    Не знал, что так можно! ЛАЙК)

  37. Аватар пользователя Ihoma

    А вы.. не из Тюмени?..

  38. Аватар пользователя Александр Канонин

    Круто!
    Вспомнил всю университетскую программу по нейронкам в питоне, пока смотрел это видео!
    Спасибо за ваш труд!

  39. Аватар пользователя 疯优雅

    Извлекатор 3000🤣🤣🤣🤣

  40. Аватар пользователя Michael

    НАКОНЕЦ-ТО хоть кто-то сказал, что выбор числа слоев производится эмпирически. До этого я думал, что это какие-то тайные знания, доступные посвященным )

  41. Аватар пользователя Сергей Кондулуков

    Но это фантастика в чистом виде. Дискета конечно старовато, тут нужен специальный компилятор 🙂 И ещё вопрос почему программу пишите на VS Code. Наверняка нужен какой-то плагин или расширение. Я использую Пи Шарм подойдёт ли он обучению на Питон.

  42. Аватар пользователя L0nelyMurder0nWinter

    Я знаю лин.ал,но ниче н4 понял

  43. Аватар пользователя Шмель

    Можно вопрос, а как вы достали веса?

  44. Аватар пользователя Imya Imya

    Видать тебе хабр очень сильно помог даже с цветками

  45. Аватар пользователя Программист в путешествии

    не простая задача из первой страницы с гугла.. окей

  46. Аватар пользователя maxim gagarin

    вот вам завод по производству доширака

  47. Аватар пользователя Igor K

    было ооочень интересно, но ничего не понятно. Классное видео. Спасибо. Больше такого контента!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *