Твоя ПЕРВАЯ НЕЙРОСЕТЬ на Python с нуля! | За 10 минут :3

Хауди Хо™ - Просто о мире IT!
31 Jul 202318:30

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

00:00

😀 Основы нейросетей и первые шаги в Python

Вводный урок охватывает азы создания нейросети с нуля, используя Python и библиотеку TensorFlow. Автор обещает научить зрителей писать нейросеть менее чем в 100 строк кода, включая работу с различными функциями активации, такими как выпрямитель и сигмоид, и методы сохранения модели. Затрагивается тема нейрона смещения и его важность. Примером служит задача распознавания рукописных цифр на основе публичного датасета MNIST, что делает урок не только обучающим, но и интересным.

05:02

😀 Путь к профессии Python-разработчика через обучение

Второй абзац посвящен рекламе курса по Python-разработке от Яндекс.Практикума, который начинается с бесплатной вводной части. Курс рассчитан на 9 месяцев и охватывает всё от базовых знаний до продвинутых алгоритмов и создания веб-сервисов и ботов с использованием Django. Автор подчеркивает практическую направленность курса, включая работу над реальными проектами и подготовку к собеседованию.

10:03

😀 Обучение нейросети: от теории к практике

В третьем абзаце описывается процесс обучения нейросети, начиная с объяснения переменных и итерации по датасету для коррекции весов. Автор объясняет процедуру форвард пропагейшн (прямое распространение), включая использование функции активации для нормализации входных данных, и бэк пропагейшн (обратное распространение) для коррекции весов на основе ошибок. Этот абзац детально освещает ключевые аспекты обучения нейросетей, делая акцент на понимании и применении математических концепций.

15:04

😀 Применение и тестирование нейросети

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

Mindmap

Keywords

💡нейросети

Нейросети — это модели искусственного интеллекта, имитирующие работу человеческого мозга для обработки данных и обучения на основе примеров. В видео автор обещает объяснить основы работы нейросетей с нуля, включая их создание и обучение для распознавания рукописных цифр.

💡Python

Python — это популярный высокоуровневый программный язык, известный своей читаемостью и гибкостью. В контексте видео, автор использует Python как основной инструмент для написания кода нейросети, подчеркивая его доступность и популярность в среде разработчиков и исследователей в области ИИ.

💡TensorFlow

TensorFlow — это открытая библиотека для машинного обучения, разработанная Google. Хотя в видео упоминается недовольство зрителей по поводу использования TensorFlow, автор предлагает углубиться в создание нейросети с нуля, чтобы показать основные принципы без полагания на высокоуровневые абстракции, предоставляемые такими фреймворками.

💡нейрон

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

💡активации функции

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

💡обучение

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

💡MNIST

MNIST — это стандартный датасет, содержащий 60 000 тренировочных изображений рукописных цифр, используемый в машинном обучении и компьютерном зрении. В видео автор выбирает этот датасет в качестве основы для обучения нейросети распознаванию цифр.

💡веса

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

💡инференс

Инференс (или вывод) в контексте машинного обучения — это процесс использования обученной модели для получения предсказаний на новых данных. Видео демонстрирует, как после обучения модели на датасете MNIST использовать ее для распознавания новых, ранее не виденных изображений цифр.

💡бэкпропагация

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

Highlights

Создание урока по нейросетям, включая работу с TensorFlow и PyTorch.

Критика за недостаточное объяснение создания нейросетей с нуля.

Объяснение общих принципов работы нейросетей с нуля.

Введение в нейрон смещения и различные функции активации.

Демонстрация сохранения и использования обученной модели нейросети.

Использование Python для программирования нейросети.

Обучение нейросети распознаванию рукописных цифр.

Использование публичного датасета MNIST для обучения.

Разработка нейросети менее чем в 100 строках кода.

Важность инициализации весов для обучения нейросети.

Рекомендация курса Python разработчик от Яндекс Практикум.

Загрузка и предобработка датасета MNIST.

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

Достижение точности распознавания рукописных цифр до 93%.

Тестирование нейросети на собственно созданном изображении.

Создание мини-библиотеки для работы с нейросетями.

Transcripts

play00:00

хауди-хо друзья Недавно я сделал урок по

play00:03

нейросетям за один час и кому-то не

play00:06

понравилось что я там показал работу с

play00:08

тензора Flow и пальточек вместо того

play00:11

чтобы объяснить как самому с нуля

play00:13

написать нейросеть что ж предлагаю эту

play00:16

ситуацию сегодня исправить а заодно

play00:18

познакомиться с общим принципом работы

play00:20

нейросетей прямо вот с нуля и также я

play00:23

вам расскажу про Нейрон смещение и про

play00:26

разные функции активации по типу

play00:29

выпрямителя и седьмой А ещё я покажу как

play00:32

сохранить модель обученной нейросети как

play00:35

на ней сделать инференс и как её даже

play00:37

упаковать в самую настоящую нейросетивую

play00:40

библиотеку и конечно же всё это мы будем

play00:43

писать на языке Python Ну а чтобы было

play00:46

интересно слушать и смотреть Давайте

play00:48

научим нейросеть распознавать написанные

play00:51

от руки цифры и сделаем это на основе

play00:54

публичного дата Сета эмнистов в котором

play00:57

лежат 60 тысяч тренировочных изображений

play00:59

и так вот для решения этой задачи мы с

play01:03

вами напишем менее 100 строчек кода

play01:05

Однако самое сложное часть нашей

play01:07

нейросети умещается всего в 6 строк кода

play01:10

и Хотя качество кода не измеряется

play01:13

количеством строк Осознание что тебе

play01:15

предстоит разобрать всего каких-то 100

play01:18

строчек вместо скажем 10.000

play01:20

воспринимается уже как-то легче так что

play01:22

я надеюсь немножко вас успокоил и теперь

play01:25

давайте уже смело начнём для начала Я

play01:29

приведу простой пример из нашей жизни

play01:31

Как вы думаете какая это цифра скорее

play01:34

всего каждый из вас сейчас ответит что

play01:36

эта цифра три но как вы это сделали ведь

play01:40

по сути это написано рукой человека

play01:42

цифра И даже если я буду записывать её

play01:45

много раз каждый раз она у меня будет

play01:47

выглядеть чуточку по-другому но всё так

play01:50

же во всех случаях вы распознаете в ней

play01:53

цифру три Всё дело в нашем мозге который

play01:56

при помощи своих нейронных связей и

play01:58

синусов позволяет решить данную задачу

play02:01

ведь когда-то давно еще в школе вас

play02:04

научили что циферка 3 выглядит Именно

play02:07

таким образом то есть по факту у вас в

play02:10

голове уже работает большая нейронная

play02:13

сеть благодаря которой вы умеете писать

play02:15

читать рисовать водить машину и вообще

play02:18

делать все что угодно и Вы даже можете

play02:21

поставить лайк этому уроку Я надеюсь вы

play02:24

это уже сделали А еще если вы будете

play02:27

повторять все то же самое По ходу урока

play02:30

то тогда сразу становите себе библиотеку

play02:33

нумпай и по желанию еще Мэт плот лип для

play02:36

визуализации данных и можете сразу

play02:38

создать где-нибудь Файлик main.pi и

play02:41

начав писать в нём код который я буду

play02:43

дальше показывать пока что просто

play02:45

импортируем в нём библиотеки Ну Пай и

play02:48

мэтплот ли Ну и вот точно таким же

play02:51

образом работает искусственная нейронная

play02:54

сеть Она состоит из набора нейронов

play02:56

которые соединены между собой синапсами

play02:58

они же веса и каждый набор таких

play03:01

нейронов принято называть слоем слои

play03:04

бывают разные в нашем примере первый

play03:06

слой - это входные данные сюда мы просто

play03:09

Передаем информацию которая должна будет

play03:12

обработать нейросеть чтобы потом выдать

play03:14

какой-то результат второй - это скрытый

play03:17

слой Здесь нейросеть должна будет

play03:19

обработать данные и передать их в

play03:21

следующий слой и уже третий слой - это

play03:24

выходные данные То есть это выхлоп

play03:26

нейросети Ну а в качестве значений

play03:29

первого входного слоя мы возьмём цвета

play03:32

пикселей из исходного изображения с

play03:34

рукописной цифрой на этих данных

play03:36

нейросеть будет обучаться и делать Она

play03:39

это будет при помощи синапсов или же

play03:41

соединений между нейронами их ещё

play03:43

принято называть просто словом веса так

play03:46

как выглядит эти веса это по сути просто

play03:49

числовые матрицы в нашем упрощённом

play03:52

примере их будет две первое числовая

play03:54

Матрица будет иметь форму 4 x 5 и она

play03:58

будет соединять второй и слои между

play04:00

собой то есть скрытый слой и слой

play04:02

входных данных вторая Матрица будет

play04:05

иметь форму 3 на 4 и она уже будет

play04:08

соединять третий и второй слои между

play04:10

собой то есть слой с выходными данными и

play04:13

скрытый слой при этом популярной

play04:15

практикой является инициализация весов

play04:18

случайным образом это важно потому что

play04:21

именно благодаря весам будет зависеть то

play04:23

насколько хорошо Наша нейросеть будет

play04:25

справляться с задачей если бы

play04:27

существовал способ сразу правильно

play04:29

инициализировать веса тогда обучать

play04:31

нейросеть было бы просто не нужно Однако

play04:34

такого способа нет поэтому мы при помощи

play04:37

рандома инициализируем матрицы весов

play04:40

например значение от -05 до 0,5 и в

play04:44

дальнейшем будем корректировать их в

play04:46

процессе обучения нейросети на

play04:48

тренировочном датасете Но об этом чуть

play04:51

позже а чтобы разбираться в этом всем

play04:53

лучше и научиться использовать нейросети

play04:56

для создания веб-сервисов и ботов Я

play04:59

рекомендую углубиться в изучение пайтон

play05:01

И для этого как нельзя лучше подойдет

play05:03

курс с бесплатной водной частью Python

play05:06

разработчик от Яндекс практикум здесь за

play05:10

9 месяцев с нуля Вам помогут освоить

play05:12

новую профессию и научат всему что

play05:14

сегодня нужно пайтон-программисту А

play05:17

попробовать себя в роли пайтон

play05:18

разработчика Вы можете бесплатно на

play05:21

водной части курса вы узнаете Что такое

play05:23

бэкенты Какие задачи Он решает

play05:25

исследуйте серверную часть приложения и

play05:28

поймете как она взаимодействует с

play05:30

пользователем и с другими серверами

play05:32

Напишите свой первый код и создадите

play05:34

персонального помощника Анфису на

play05:37

платном курсе вы будете работать с

play05:39

Джанго с егорм вы сможете проектировать

play05:42

базы данных и проводить тестирование

play05:44

своих приложений и это только начало

play05:47

дальше вас ждет

play05:50

протокол auf 2.0 telegram-боты и модуль

play05:54

посвященный продвинутым алгоритмам в

play05:56

программировании Причем на протяжении

play05:58

всей Какой у вас постоянно будет

play06:01

практика на учебных и реальных проектах

play06:03

а в конце обучения Яндекс практикум еще

play06:06

и поможет вам собрать портфолио ребята

play06:09

расскажут и покажут Как проходить

play06:11

собеседование и писать резюме вместе со

play06:13

специалистом карьерного центра вы

play06:15

потренируетесь проходить интервью и

play06:18

получите развернутый фидбэк короче

play06:20

годнота и для всех желающих стать

play06:22

программистами это реальный шанс Так что

play06:25

Не упустите его и переходите по ссылке в

play06:28

описании либо сканируйте qr-код который

play06:30

сейчас видите на своих экранах и

play06:33

начинайте проходить бесплатную вводную

play06:35

часть курса

play06:36

Окей теперь поговорим про нейроны

play06:40

смещения это специальные нейроны которые

play06:42

всегда равняются единицы и никогда не

play06:45

имеют входных синапсов как и связи между

play06:48

собой они явно не присутствуют в

play06:51

архитектуре нейросети но учитываются при

play06:53

расчетах и Нейрон смещения нужен для

play06:56

того чтобы иметь возможность получать

play06:58

результат сдвига графика функции

play07:01

активации вправо или влево проще это

play07:04

можно объяснить на графике Представьте

play07:06

если мы возьмем в пример о нейросеть у

play07:09

которой всего один Нейрон на входе и

play07:11

сразу один Нейрон на выходе и она должна

play07:14

будет различать между собой скажем

play07:16

кругляшки и треугольники в этом случае

play07:19

мы можем менять только вес нейросети А

play07:22

значит двигать кривую графику Только

play07:24

вверх и вниз но если добавить Нейрон

play07:27

смещения появится возможность двигать

play07:29

кривую ещё и вправо-влево и думаю так

play07:32

уже гораздо понятнее Зачем он вообще

play07:34

нужен если что я даже оставлю ссылку в

play07:37

описании на статью где Чуть более

play07:40

подробно объясняется Что такое Нейрон

play07:43

смещения на каких-то примерах и школьной

play07:45

математики а пока что продолжим и перед

play07:48

тем как мы перейдём к основному коду Я

play07:51

предлагаю Взглянуть на дата сет эмнист в

play07:54

котором У нас есть 60.000 изображений

play07:56

размером 28 на 28 пикселей все они

play08:00

черно-белые и имеют всего один цветовой

play08:03

канал это оттенок серого то есть 0 это

play08:06

черный цвет а единица это белый цвет все

play08:10

что между оттенки серого в описании я

play08:13

также оставлю ссылочку на dataset в

play08:16

формате npz и если что это дам по

play08:19

массива нумпай поэтому его можно будет

play08:21

просто загрузить через метод лот в

play08:23

нумпай но я думаю вы это и так уже

play08:25

знаете для этого вы можете просто

play08:27

скопировать вот этот код который делает

play08:30

четыре основные вещи первое Он загружает

play08:33

файл энистомпизив в память второе

play08:36

перебрасывает цвета формат Юнита RGB то

play08:39

есть в значении Отто нуля до одного

play08:41

третье меняет форму массива изображений

play08:44

если изначально он имеет форму 60 тысяч

play08:48

на 28 на 28 то теперь это будет 60.000

play08:52

на 784 и в таком виде мы используем его

play08:56

как наши входные данные То есть у нас

play08:59

будет а 784 нейрона на входном слое

play09:03

нашей нейросети Напоминаю что 784 это 28

play09:07

умноженное на 28 или же массив цветов

play09:10

пикселей каждого изображения из датасета

play09:13

и наконец 4 этот код приводит к классы

play09:16

дата Сета к удобному для нас формату

play09:18

если изначально это просто одномерный

play09:21

массив состоящий из 60.000 элементов то

play09:25

мы его приводим к виду многомерного

play09:27

массива с формой 60.000 на 10 так как у

play09:30

нас будет 10 классов для 10 возможных

play09:33

цифр соответственно Так мы можем легко

play09:36

корректировать веса при обучении

play09:38

нейросети затем Давайте сразу в основном

play09:41

коде поменяем размер наших числовых

play09:43

матриц в первом слое нейронов будет 784

play09:47

То есть это просто значение пикселей в

play09:50

изображении во втором скрытым слое пусть

play09:53

будет 20 нейронов а в третьем выходном

play09:55

соответственно 10 нейронов для десяти

play09:58

цифр здесь же поменяем и нейроны

play10:00

смещение для скрытого и выходного слоев

play10:03

Ну и конечно загрузим Сам датасет теперь

play10:06

переходим к обучению нашей нейросети А

play10:09

если быть точнее то к процессу коррекции

play10:11

Весов и первым делом объявляем

play10:13

переменную applex а затем итерируем все

play10:16

изображения в нашем датасете столько раз

play10:19

сколько у нас будет Эпоха обучения также

play10:22

сразу перебрасываем в цикле изображение

play10:24

и его классов форму двумерного массива

play10:27

так как дальше они будут использованы

play10:29

для перемножения матриц Ну а эпохи

play10:32

обучения нам нужны для того чтобы

play10:34

Некоторое количество раз корректировать

play10:36

веса на всём датасете но об этом Вы

play10:39

можете почитать отдельно тут главное не

play10:41

ставить слишком высокое значение иначе

play10:43

нейросеть будет не учиться а запоминать

play10:46

дальше наступает первый этап обучения

play10:49

который называется Форвард пропогейшен и

play10:52

он нужен для того чтобы скормить

play10:54

нейросети входные данные прогнать их

play10:56

через скрытые слои и наконец получить

play10:59

выходные данные соответственно данные

play11:02

для первого слоя у нас уже есть это

play11:04

переменная Image в нашем цикле на всякий

play11:07

случай еще раз повторю она представляет

play11:09

из себя массив из 784 элементов каждый

play11:13

из которых хранит в себе значение одного

play11:15

пикселя от 0 до единицы теперь эти

play11:19

данные нужно передать дальше в наш

play11:21

скрытый слой через синапсы это у нас

play11:23

переменная waits in futu hidden для

play11:26

этого нужно перемножить её на матрицу

play11:29

Image и прибавить сверху Нейрон смещения

play11:31

Однако в результате значения нейронов

play11:34

могут получить гораздо больше или меньше

play11:36

ожидаемого диапазона поэтому их нужно

play11:39

еще нормализовать И для этого мы

play11:41

применим так называемую функцию

play11:43

активации они кстати бывают разные самая

play11:47

простейшая это Линейная функция

play11:49

активации которая ещё называют единичный

play11:52

скачок или жёсткая пороговая функция ещё

play11:55

есть очень популярная функция активации

play11:57

которая называется вы Сель Она же

play12:00

rective Fight линия Юнит или же

play12:02

сокращенно релу Ну и конечно же функция

play12:04

активации сигмой которую мы сейчас и

play12:07

будем использовать какую и когда

play12:09

использовать функцию активации зависит

play12:12

от разных факторов например от

play12:14

архитектуры и типа нейросети обязательно

play12:16

почитайте об этом дополнительно на

play12:19

досуге Ну а Мы возвращаемся к нашему

play12:21

коду и применяем к нашей переменной

play12:24

hidden функцию активации сигмой код

play12:26

который выглядит Вот так А ее формулу вы

play12:30

сейчас видите на своих экранах

play12:31

аналогичные действия повторяем уже для

play12:34

выходного слоя и Передаем данный уже из

play12:37

скрытого в выходной то есть дальше и

play12:40

предлагают даже посмотреть как теперь у

play12:42

нас будет выглядеть выходной слой после

play12:44

всех этих манипуляций Как видите это

play12:47

просто массив из 10 элементов каждый из

play12:50

которых отражает вероятность совпадения

play12:52

с тем или иным классом но пока что он

play12:54

никак не меняется поэтому перейдем к

play12:57

следующему шагу обучения

play12:59

На данном этапе нам нужно подсчитать

play13:01

насколько сильно выхлопней рафете

play13:03

отличается от фактического значения

play13:06

Напоминаю что оно у нас хранится в

play13:08

переменной лейбл и в идеале наше

play13:10

нейросеть должна максимально к нему

play13:12

приблизиться как и в случае с функцией

play13:14

активации для подсчета разницы или же

play13:17

потерь в машинном обучении также

play13:19

существует много разных функций и мы все

play13:21

также возьмем самую простую и популярную

play13:24

которая называется mse или же это Минск

play13:27

хоэт эро её формулу я также вывожу на

play13:30

экран Ну а в коде она прописывается

play13:32

следующим образом Так мы считаем потери

play13:35

И точность нейросети между эпохами

play13:38

обучения также сразу можно вывести эту

play13:41

информацию в процентном представлении

play13:42

главное это делать именно между эпохами

play13:45

Хотя вам потом никто не мешает

play13:47

подключить тот же модуль tq И вообще

play13:49

наглядно визуализировать Весь процесс

play13:51

обучения но мы это пока пропустим и если

play13:54

сейчас повторно ради интереса запустить

play13:57

этот код то мы выбираем следующую

play14:00

картину данные повторяются потому что

play14:02

фактического обучения между эпохами не

play14:05

происходит поэтому переходим на третий

play14:07

шаг и Помните я в самом начале говорил

play14:10

вам что самое сложное часть нашей

play14:13

нейросети умещается в 6 строчек кода так

play14:16

вот мы к ним подошли вплотную именно

play14:18

этот алгоритм отвечает за

play14:20

непосредственное обучение нейросети а

play14:22

Называется он Бэк пропогейшен и

play14:25

математический он выглядит вот так

play14:27

только не пугайтесь это нам не

play14:29

понадобится Потому что я не собираюсь

play14:31

объяснять этот алгоритм частично Потому

play14:34

что мне лень на частично потому что про

play14:36

него уже есть целый отдельные большие

play14:38

уроки и научные статьи Да и я наверное

play14:41

не так хорошо разбираюсь в таких дебрях

play14:44

нейросетей А вы скорее всего не помните

play14:46

даже курс школьной математики поэтому

play14:48

Давайте сойдёмся на том что вы этот код

play14:51

просто скопируйте А в описании я оставлю

play14:54

ссылки на статьи где подробно объясняют

play14:56

про Бэк пропаган и кстати он существует

play14:59

не один в нейросетях есть и другие

play15:01

алгоритмы для обучения Просто этот самый

play15:04

простой Однако единственное на что я все

play15:06

же хочу обратить Ваше внимание Так это

play15:09

на то что если бы в вашей нейросети было

play15:11

больше скрытых слоев то эту операцию то

play15:14

есть бег пропогейча нужно было бы

play15:16

повторить для каждого из них ну и так же

play15:18

как вы видите в этом коде мы идем справа

play15:21

налево то есть от output так хидэну и

play15:24

отхидена к инпуту поэтому алгоритмы

play15:26

называется Back propegation а

play15:28

единственное что мы обновляем это

play15:30

синапсы или же веса то есть по факту мы

play15:33

корректируем веса А значит Учим

play15:36

нейросеть и на этом код обучения

play15:37

закончен если его сейчас запустить мы

play15:41

получим Вот такой результат в ходе трёх

play15:43

эпох обучения нейросеть научилась

play15:45

распознавать рукописные цифры с

play15:48

точностью до

play15:49

93%. и мы можем это даже проверить для

play15:52

этого можно случайным образом взять Одно

play15:54

такое изображение из датасета а затем

play15:57

скопировать коды секции for propegation

play15:59

чтобы произвести инференс уже на

play16:02

обученной нейросети и все это вывести

play16:04

через мэттплот лип запускаем и видим Что

play16:07

нейросеть верно определила цифру 4 А

play16:11

значит она обучилась и работает и на

play16:13

этом по сути урок можно было бы

play16:15

закончить но я еще хочу показать две

play16:17

вещи Первая это то что вы можете

play16:20

сохранить результат обучения при помощи

play16:22

метода numpy Save на выходе у вас

play16:25

получится все такой же Файлик в формате

play16:27

np.ui либо NPC смотря что и как вы

play16:30

решите сохранить его Потом можно будет

play16:32

загрузить через тот же метод numpayload

play16:35

и сразу делать инференс А если все это

play16:38

упаковать в небольшую библиотеку и

play16:40

назвать её например How do Simple вас

play16:44

даже получится своя собственная

play16:45

мини-библиотека для работы с нейросетями

play16:48

в которую даже можно добавить опыт для

play16:50

удобства и выбор всяких там функций по

play16:53

типу функций активации и второе Давайте

play16:56

потестим нашу нейронку на изобра в ней

play16:59

которого нет в dataseti Я считаю Так

play17:01

будет честно Так что я запустил Paint

play17:04

создал изображение размером 28 на 28

play17:08

пикселей и от руки хоть и мышкой

play17:10

нарисовал циферку 3 единственное я

play17:13

затупил и сделал это чёрным цветом на

play17:15

белом фоне Хотя изображение должно быть

play17:17

белым цветом на черном фоне Но чуть

play17:19

позже в коде мы просто инверсируем цвета

play17:22

Так что это не проблема Ну и также коды

play17:25

ференция Чутка подправил а именно в

play17:27

самом начале убрал загрузку случайного

play17:29

изображения из Data Сета и вместо этого

play17:31

написал загрузку своей картинки но тут

play17:34

ничего сложного Так что сразу запускаем

play17:37

коды смотрим что получилось как видите

play17:39

нейросеть действительно работает она

play17:42

точно распознала что на картинке

play17:44

нарисована цифра три Хотя ее не было в

play17:47

датасете Ведь я её только что сам

play17:49

нарисовал в пейнте вот теперь можно

play17:51

считать задача выполнена Ну а весь код

play17:54

из урока я оставлю в описании под

play17:57

роликом также там будут ссылки на

play17:58

полезные уроки и всё о чём я говорил в

play18:01

ролике в остальном же я жду от вас

play18:04

Царский лайк конечно же подписывайтесь

play18:06

на канал и включайте колокольчик

play18:08

уведомлений и обязательно пишите

play18:10

комментарии так работает уже нейросеть

play18:13

Ютуба это всё помогает продвижению

play18:15

ролика удачи и всегда помните нейросети

play18:18

это легче чем кажется

Rate This

5.0 / 5 (0 votes)

Etiquetas Relacionadas
PythonнейросетиEMNISTобразованиепрограммированиемашинное обучениерукописные цифрыобучение кодукурс Pythonактивация
¿Necesitas un resumen en inglés?