Твоя ПЕРВАЯ НЕЙРОСЕТЬ на Python с нуля! | За 10 минут :3
Summary
TLDRВ этом видеоуроке автор решает показать, как можно создать нейросеть с нуля, используя Python, и обучить её распознавать рукописные цифры на примере публичного датасета MNIST, содержащего 60 тысяч изображений. Урок охватывает основы работы нейросетей, включая нейроны смещения и различные функции активации, такие как выпрямитель и сигмоид. Автор обещает, что для решения задачи потребуется менее 100 строк кода, при этом самая сложная часть уложится всего в 6 строк. Также затрагивается тема сохранения модели и создания собственной нейросетевой библиотеки. В конце предлагается проверка работы нейросети на собственно созданном изображении.
Takeaways
- 📚 В уроке рассматривается создание нейросети с нуля, включая работу с TensorFlow и PyTorch.
- 🔍 Основное внимание уделяется принципам работы нейросетей, включая нейроны смещения и различные функции активации.
- 👩💻 Все примеры кода написаны на Python, что делает урок доступным для широкой аудитории разработчиков.
- 🎓 Урок подробно объясняет, как самостоятельно написать нейросеть, используя менее 100 строк кода.
- 🖼 Пример применения нейросети демонстрируется на задаче распознавания рукописных цифр с использованием датасета MNIST.
- 🤖 Показано, как сохранить обученную модель нейросети для последующего использования в инференсе.
- 🛠 В уроке предложены практические советы по упаковке модели в библиотеку для удобства использования в различных проектах.
- 🎨 Объяснено значение инициализации весов нейронов и их корректировка в процессе обучения для улучшения эффективности модели.
- 👨🏫 Вводится концепция нейрона смещения и его роль в регулировании графика функции активации.
- 🔄 Демонстрируется процесс обучения нейросети, включая такие этапы, как прямое распространение и обратное распространение ошибки.
Q & A
Что такое нейросеть и как она работает?
-Нейросеть - это компьютерная модель, вдохновленная структурой и функциями мозга, состоящая из нейронов и синапсов. Она обучается на данных для выполнения специфических задач, таких как распознавание образов, благодаря адаптации весов между нейронами.
Какая основная цель урока по нейросетям?
-Основная цель урока - показать, как с нуля написать и обучить простую нейросеть на языке Python, используя публичный датасет для распознавания рукописных цифр.
Какие библиотеки предлагается использовать для работы с нейросетью?
-Для работы с нейросетью предлагается использовать библиотеки NumPy для обработки данных и Matplotlib для визуализации данных.
Какой датасет используется в уроке?
-В уроке используется публичный датасет EMNIST, содержащий 60 тысяч тренировочных изображений рукописных цифр.
Что такое нейрон смещения и зачем он нужен?
-Нейрон смещения - это специальный нейрон, всегда равный единице, не имеющий входных синапсов. Он нужен для коррекции активационной функции, позволяя смещать её влево или вправо, что улучшает способность нейросети адаптироваться при обучении.
Какие функции активации упоминаются в уроке?
-В уроке упоминаются такие функции активации, как линейная функция, ReLU (rectified linear unit) и сигмоидальная функция.
Что такое прямое распространение (forward propagation) в контексте нейросетей?
-Прямое распространение - это процесс передачи входных данных через слои нейросети для получения выходного результата без коррекции весов.
Какая методика используется для обучения нейросети в уроке?
-Для обучения нейросети используется методика обратного распространения ошибки (backpropagation), которая позволяет корректировать веса сети на основе ошибок между предсказанными и фактическими значениями.
Как проверяется работоспособность обученной нейросети?
-Работоспособность обученной нейросети проверяется путем инференса на новом изображении, не входящем в тренировочный датасет, и сравнения полученного результата с ожидаемым.
Как сохранить модель обученной нейросети для последующего использования?
-Модель обученной нейросети можно сохранить с помощью метода `numpy.save`, после чего её можно загрузить и использовать для инференса без необходимости повторного обучения.
Outlines
😀 Основы нейросетей и первые шаги в Python
Вводный урок охватывает азы создания нейросети с нуля, используя Python и библиотеку TensorFlow. Автор обещает научить зрителей писать нейросеть менее чем в 100 строк кода, включая работу с различными функциями активации, такими как выпрямитель и сигмоид, и методы сохранения модели. Затрагивается тема нейрона смещения и его важность. Примером служит задача распознавания рукописных цифр на основе публичного датасета MNIST, что делает урок не только обучающим, но и интересным.
😀 Путь к профессии Python-разработчика через обучение
Второй абзац посвящен рекламе курса по Python-разработке от Яндекс.Практикума, который начинается с бесплатной вводной части. Курс рассчитан на 9 месяцев и охватывает всё от базовых знаний до продвинутых алгоритмов и создания веб-сервисов и ботов с использованием Django. Автор подчеркивает практическую направленность курса, включая работу над реальными проектами и подготовку к собеседованию.
😀 Обучение нейросети: от теории к практике
В третьем абзаце описывается процесс обучения нейросети, начиная с объяснения переменных и итерации по датасету для коррекции весов. Автор объясняет процедуру форвард пропагейшн (прямое распространение), включая использование функции активации для нормализации входных данных, и бэк пропагейшн (обратное распространение) для коррекции весов на основе ошибок. Этот абзац детально освещает ключевые аспекты обучения нейросетей, делая акцент на понимании и применении математических концепций.
😀 Применение и тестирование нейросети
Четвертый абзац посвящен проверке обученной нейросети на практике, включая методы сохранения и загрузки модели, а также создание собственной библиотеки для упрощения работы с нейросетями. Автор делится результатами тестирования модели на новых данных, не входящих в обучающий датасет, демонстрируя эффективность обучения. Урок завершается советами по продвижению контента и призывом к действию, подчеркивая доступность нейросетей для изучения.
Mindmap
Keywords
💡нейросети
💡Python
💡TensorFlow
💡нейрон
💡активации функции
💡обучение
💡MNIST
💡веса
💡инференс
💡бэкпропагация
Highlights
Создание урока по нейросетям, включая работу с TensorFlow и PyTorch.
Критика за недостаточное объяснение создания нейросетей с нуля.
Объяснение общих принципов работы нейросетей с нуля.
Введение в нейрон смещения и различные функции активации.
Демонстрация сохранения и использования обученной модели нейросети.
Использование Python для программирования нейросети.
Обучение нейросети распознаванию рукописных цифр.
Использование публичного датасета MNIST для обучения.
Разработка нейросети менее чем в 100 строках кода.
Важность инициализации весов для обучения нейросети.
Рекомендация курса Python разработчик от Яндекс Практикум.
Загрузка и предобработка датасета MNIST.
Обучение нейросети на примере с использованием метода обратного распространения ошибки.
Достижение точности распознавания рукописных цифр до 93%.
Тестирование нейросети на собственно созданном изображении.
Создание мини-библиотеки для работы с нейросетями.
Transcripts
хауди-хо друзья Недавно я сделал урок по
нейросетям за один час и кому-то не
понравилось что я там показал работу с
тензора Flow и пальточек вместо того
чтобы объяснить как самому с нуля
написать нейросеть что ж предлагаю эту
ситуацию сегодня исправить а заодно
познакомиться с общим принципом работы
нейросетей прямо вот с нуля и также я
вам расскажу про Нейрон смещение и про
разные функции активации по типу
выпрямителя и седьмой А ещё я покажу как
сохранить модель обученной нейросети как
на ней сделать инференс и как её даже
упаковать в самую настоящую нейросетивую
библиотеку и конечно же всё это мы будем
писать на языке Python Ну а чтобы было
интересно слушать и смотреть Давайте
научим нейросеть распознавать написанные
от руки цифры и сделаем это на основе
публичного дата Сета эмнистов в котором
лежат 60 тысяч тренировочных изображений
и так вот для решения этой задачи мы с
вами напишем менее 100 строчек кода
Однако самое сложное часть нашей
нейросети умещается всего в 6 строк кода
и Хотя качество кода не измеряется
количеством строк Осознание что тебе
предстоит разобрать всего каких-то 100
строчек вместо скажем 10.000
воспринимается уже как-то легче так что
я надеюсь немножко вас успокоил и теперь
давайте уже смело начнём для начала Я
приведу простой пример из нашей жизни
Как вы думаете какая это цифра скорее
всего каждый из вас сейчас ответит что
эта цифра три но как вы это сделали ведь
по сути это написано рукой человека
цифра И даже если я буду записывать её
много раз каждый раз она у меня будет
выглядеть чуточку по-другому но всё так
же во всех случаях вы распознаете в ней
цифру три Всё дело в нашем мозге который
при помощи своих нейронных связей и
синусов позволяет решить данную задачу
ведь когда-то давно еще в школе вас
научили что циферка 3 выглядит Именно
таким образом то есть по факту у вас в
голове уже работает большая нейронная
сеть благодаря которой вы умеете писать
читать рисовать водить машину и вообще
делать все что угодно и Вы даже можете
поставить лайк этому уроку Я надеюсь вы
это уже сделали А еще если вы будете
повторять все то же самое По ходу урока
то тогда сразу становите себе библиотеку
нумпай и по желанию еще Мэт плот лип для
визуализации данных и можете сразу
создать где-нибудь Файлик main.pi и
начав писать в нём код который я буду
дальше показывать пока что просто
импортируем в нём библиотеки Ну Пай и
мэтплот ли Ну и вот точно таким же
образом работает искусственная нейронная
сеть Она состоит из набора нейронов
которые соединены между собой синапсами
они же веса и каждый набор таких
нейронов принято называть слоем слои
бывают разные в нашем примере первый
слой - это входные данные сюда мы просто
Передаем информацию которая должна будет
обработать нейросеть чтобы потом выдать
какой-то результат второй - это скрытый
слой Здесь нейросеть должна будет
обработать данные и передать их в
следующий слой и уже третий слой - это
выходные данные То есть это выхлоп
нейросети Ну а в качестве значений
первого входного слоя мы возьмём цвета
пикселей из исходного изображения с
рукописной цифрой на этих данных
нейросеть будет обучаться и делать Она
это будет при помощи синапсов или же
соединений между нейронами их ещё
принято называть просто словом веса так
как выглядит эти веса это по сути просто
числовые матрицы в нашем упрощённом
примере их будет две первое числовая
Матрица будет иметь форму 4 x 5 и она
будет соединять второй и слои между
собой то есть скрытый слой и слой
входных данных вторая Матрица будет
иметь форму 3 на 4 и она уже будет
соединять третий и второй слои между
собой то есть слой с выходными данными и
скрытый слой при этом популярной
практикой является инициализация весов
случайным образом это важно потому что
именно благодаря весам будет зависеть то
насколько хорошо Наша нейросеть будет
справляться с задачей если бы
существовал способ сразу правильно
инициализировать веса тогда обучать
нейросеть было бы просто не нужно Однако
такого способа нет поэтому мы при помощи
рандома инициализируем матрицы весов
например значение от -05 до 0,5 и в
дальнейшем будем корректировать их в
процессе обучения нейросети на
тренировочном датасете Но об этом чуть
позже а чтобы разбираться в этом всем
лучше и научиться использовать нейросети
для создания веб-сервисов и ботов Я
рекомендую углубиться в изучение пайтон
И для этого как нельзя лучше подойдет
курс с бесплатной водной частью Python
разработчик от Яндекс практикум здесь за
9 месяцев с нуля Вам помогут освоить
новую профессию и научат всему что
сегодня нужно пайтон-программисту А
попробовать себя в роли пайтон
разработчика Вы можете бесплатно на
водной части курса вы узнаете Что такое
бэкенты Какие задачи Он решает
исследуйте серверную часть приложения и
поймете как она взаимодействует с
пользователем и с другими серверами
Напишите свой первый код и создадите
персонального помощника Анфису на
платном курсе вы будете работать с
Джанго с егорм вы сможете проектировать
базы данных и проводить тестирование
своих приложений и это только начало
дальше вас ждет
протокол auf 2.0 telegram-боты и модуль
посвященный продвинутым алгоритмам в
программировании Причем на протяжении
всей Какой у вас постоянно будет
практика на учебных и реальных проектах
а в конце обучения Яндекс практикум еще
и поможет вам собрать портфолио ребята
расскажут и покажут Как проходить
собеседование и писать резюме вместе со
специалистом карьерного центра вы
потренируетесь проходить интервью и
получите развернутый фидбэк короче
годнота и для всех желающих стать
программистами это реальный шанс Так что
Не упустите его и переходите по ссылке в
описании либо сканируйте qr-код который
сейчас видите на своих экранах и
начинайте проходить бесплатную вводную
часть курса
Окей теперь поговорим про нейроны
смещения это специальные нейроны которые
всегда равняются единицы и никогда не
имеют входных синапсов как и связи между
собой они явно не присутствуют в
архитектуре нейросети но учитываются при
расчетах и Нейрон смещения нужен для
того чтобы иметь возможность получать
результат сдвига графика функции
активации вправо или влево проще это
можно объяснить на графике Представьте
если мы возьмем в пример о нейросеть у
которой всего один Нейрон на входе и
сразу один Нейрон на выходе и она должна
будет различать между собой скажем
кругляшки и треугольники в этом случае
мы можем менять только вес нейросети А
значит двигать кривую графику Только
вверх и вниз но если добавить Нейрон
смещения появится возможность двигать
кривую ещё и вправо-влево и думаю так
уже гораздо понятнее Зачем он вообще
нужен если что я даже оставлю ссылку в
описании на статью где Чуть более
подробно объясняется Что такое Нейрон
смещения на каких-то примерах и школьной
математики а пока что продолжим и перед
тем как мы перейдём к основному коду Я
предлагаю Взглянуть на дата сет эмнист в
котором У нас есть 60.000 изображений
размером 28 на 28 пикселей все они
черно-белые и имеют всего один цветовой
канал это оттенок серого то есть 0 это
черный цвет а единица это белый цвет все
что между оттенки серого в описании я
также оставлю ссылочку на dataset в
формате npz и если что это дам по
массива нумпай поэтому его можно будет
просто загрузить через метод лот в
нумпай но я думаю вы это и так уже
знаете для этого вы можете просто
скопировать вот этот код который делает
четыре основные вещи первое Он загружает
файл энистомпизив в память второе
перебрасывает цвета формат Юнита RGB то
есть в значении Отто нуля до одного
третье меняет форму массива изображений
если изначально он имеет форму 60 тысяч
на 28 на 28 то теперь это будет 60.000
на 784 и в таком виде мы используем его
как наши входные данные То есть у нас
будет а 784 нейрона на входном слое
нашей нейросети Напоминаю что 784 это 28
умноженное на 28 или же массив цветов
пикселей каждого изображения из датасета
и наконец 4 этот код приводит к классы
дата Сета к удобному для нас формату
если изначально это просто одномерный
массив состоящий из 60.000 элементов то
мы его приводим к виду многомерного
массива с формой 60.000 на 10 так как у
нас будет 10 классов для 10 возможных
цифр соответственно Так мы можем легко
корректировать веса при обучении
нейросети затем Давайте сразу в основном
коде поменяем размер наших числовых
матриц в первом слое нейронов будет 784
То есть это просто значение пикселей в
изображении во втором скрытым слое пусть
будет 20 нейронов а в третьем выходном
соответственно 10 нейронов для десяти
цифр здесь же поменяем и нейроны
смещение для скрытого и выходного слоев
Ну и конечно загрузим Сам датасет теперь
переходим к обучению нашей нейросети А
если быть точнее то к процессу коррекции
Весов и первым делом объявляем
переменную applex а затем итерируем все
изображения в нашем датасете столько раз
сколько у нас будет Эпоха обучения также
сразу перебрасываем в цикле изображение
и его классов форму двумерного массива
так как дальше они будут использованы
для перемножения матриц Ну а эпохи
обучения нам нужны для того чтобы
Некоторое количество раз корректировать
веса на всём датасете но об этом Вы
можете почитать отдельно тут главное не
ставить слишком высокое значение иначе
нейросеть будет не учиться а запоминать
дальше наступает первый этап обучения
который называется Форвард пропогейшен и
он нужен для того чтобы скормить
нейросети входные данные прогнать их
через скрытые слои и наконец получить
выходные данные соответственно данные
для первого слоя у нас уже есть это
переменная Image в нашем цикле на всякий
случай еще раз повторю она представляет
из себя массив из 784 элементов каждый
из которых хранит в себе значение одного
пикселя от 0 до единицы теперь эти
данные нужно передать дальше в наш
скрытый слой через синапсы это у нас
переменная waits in futu hidden для
этого нужно перемножить её на матрицу
Image и прибавить сверху Нейрон смещения
Однако в результате значения нейронов
могут получить гораздо больше или меньше
ожидаемого диапазона поэтому их нужно
еще нормализовать И для этого мы
применим так называемую функцию
активации они кстати бывают разные самая
простейшая это Линейная функция
активации которая ещё называют единичный
скачок или жёсткая пороговая функция ещё
есть очень популярная функция активации
которая называется вы Сель Она же
rective Fight линия Юнит или же
сокращенно релу Ну и конечно же функция
активации сигмой которую мы сейчас и
будем использовать какую и когда
использовать функцию активации зависит
от разных факторов например от
архитектуры и типа нейросети обязательно
почитайте об этом дополнительно на
досуге Ну а Мы возвращаемся к нашему
коду и применяем к нашей переменной
hidden функцию активации сигмой код
который выглядит Вот так А ее формулу вы
сейчас видите на своих экранах
аналогичные действия повторяем уже для
выходного слоя и Передаем данный уже из
скрытого в выходной то есть дальше и
предлагают даже посмотреть как теперь у
нас будет выглядеть выходной слой после
всех этих манипуляций Как видите это
просто массив из 10 элементов каждый из
которых отражает вероятность совпадения
с тем или иным классом но пока что он
никак не меняется поэтому перейдем к
следующему шагу обучения
На данном этапе нам нужно подсчитать
насколько сильно выхлопней рафете
отличается от фактического значения
Напоминаю что оно у нас хранится в
переменной лейбл и в идеале наше
нейросеть должна максимально к нему
приблизиться как и в случае с функцией
активации для подсчета разницы или же
потерь в машинном обучении также
существует много разных функций и мы все
также возьмем самую простую и популярную
которая называется mse или же это Минск
хоэт эро её формулу я также вывожу на
экран Ну а в коде она прописывается
следующим образом Так мы считаем потери
И точность нейросети между эпохами
обучения также сразу можно вывести эту
информацию в процентном представлении
главное это делать именно между эпохами
Хотя вам потом никто не мешает
подключить тот же модуль tq И вообще
наглядно визуализировать Весь процесс
обучения но мы это пока пропустим и если
сейчас повторно ради интереса запустить
этот код то мы выбираем следующую
картину данные повторяются потому что
фактического обучения между эпохами не
происходит поэтому переходим на третий
шаг и Помните я в самом начале говорил
вам что самое сложное часть нашей
нейросети умещается в 6 строчек кода так
вот мы к ним подошли вплотную именно
этот алгоритм отвечает за
непосредственное обучение нейросети а
Называется он Бэк пропогейшен и
математический он выглядит вот так
только не пугайтесь это нам не
понадобится Потому что я не собираюсь
объяснять этот алгоритм частично Потому
что мне лень на частично потому что про
него уже есть целый отдельные большие
уроки и научные статьи Да и я наверное
не так хорошо разбираюсь в таких дебрях
нейросетей А вы скорее всего не помните
даже курс школьной математики поэтому
Давайте сойдёмся на том что вы этот код
просто скопируйте А в описании я оставлю
ссылки на статьи где подробно объясняют
про Бэк пропаган и кстати он существует
не один в нейросетях есть и другие
алгоритмы для обучения Просто этот самый
простой Однако единственное на что я все
же хочу обратить Ваше внимание Так это
на то что если бы в вашей нейросети было
больше скрытых слоев то эту операцию то
есть бег пропогейча нужно было бы
повторить для каждого из них ну и так же
как вы видите в этом коде мы идем справа
налево то есть от output так хидэну и
отхидена к инпуту поэтому алгоритмы
называется Back propegation а
единственное что мы обновляем это
синапсы или же веса то есть по факту мы
корректируем веса А значит Учим
нейросеть и на этом код обучения
закончен если его сейчас запустить мы
получим Вот такой результат в ходе трёх
эпох обучения нейросеть научилась
распознавать рукописные цифры с
точностью до
93%. и мы можем это даже проверить для
этого можно случайным образом взять Одно
такое изображение из датасета а затем
скопировать коды секции for propegation
чтобы произвести инференс уже на
обученной нейросети и все это вывести
через мэттплот лип запускаем и видим Что
нейросеть верно определила цифру 4 А
значит она обучилась и работает и на
этом по сути урок можно было бы
закончить но я еще хочу показать две
вещи Первая это то что вы можете
сохранить результат обучения при помощи
метода numpy Save на выходе у вас
получится все такой же Файлик в формате
np.ui либо NPC смотря что и как вы
решите сохранить его Потом можно будет
загрузить через тот же метод numpayload
и сразу делать инференс А если все это
упаковать в небольшую библиотеку и
назвать её например How do Simple вас
даже получится своя собственная
мини-библиотека для работы с нейросетями
в которую даже можно добавить опыт для
удобства и выбор всяких там функций по
типу функций активации и второе Давайте
потестим нашу нейронку на изобра в ней
которого нет в dataseti Я считаю Так
будет честно Так что я запустил Paint
создал изображение размером 28 на 28
пикселей и от руки хоть и мышкой
нарисовал циферку 3 единственное я
затупил и сделал это чёрным цветом на
белом фоне Хотя изображение должно быть
белым цветом на черном фоне Но чуть
позже в коде мы просто инверсируем цвета
Так что это не проблема Ну и также коды
ференция Чутка подправил а именно в
самом начале убрал загрузку случайного
изображения из Data Сета и вместо этого
написал загрузку своей картинки но тут
ничего сложного Так что сразу запускаем
коды смотрим что получилось как видите
нейросеть действительно работает она
точно распознала что на картинке
нарисована цифра три Хотя ее не было в
датасете Ведь я её только что сам
нарисовал в пейнте вот теперь можно
считать задача выполнена Ну а весь код
из урока я оставлю в описании под
роликом также там будут ссылки на
полезные уроки и всё о чём я говорил в
ролике в остальном же я жду от вас
Царский лайк конечно же подписывайтесь
на канал и включайте колокольчик
уведомлений и обязательно пишите
комментарии так работает уже нейросеть
Ютуба это всё помогает продвижению
ролика удачи и всегда помните нейросети
это легче чем кажется
浏览更多相关视频
Join Strings Function | C Programming Example
ЭКОНОМИЯ ВРЕМЕНИ И ДЕНЕГ ПРИ ВЫБОРЕ НЕЙРОСЕТИ (МОДЕЛИ ТИПА LLM)
1 1 Введение
⭐ ВАШ САЙТ СКУЧЕН? ЭТОТ ЭФФЕКТ В ELEMENTOR ЗАСТАВИТ ПОСЕТИТЕЛЕЙ ВОСХИЩАТЬСЯ | УРОКИ WORDPRESS
Earn US$450 Daily POSTING SONGS ONLINE In Minutes Worldwide - Simple STEP-BY-STEP Guide
AC and induction motors explained
5.0 / 5 (0 votes)