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

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

Summary

TLDRIn this educational video, the host addresses previous criticisms by demonstrating how to build a neural network from scratch, in contrast to using frameworks like TensorFlow. The lesson delves into the fundamentals of neural network operations, explaining concepts like neurons, bias, and various activation functions such as rectifiers. The tutorial focuses on a practical project, teaching viewers to create a neural network in Python that can recognize handwritten digits using the MNIST dataset. The video promises to accomplish this in less than 100 lines of code, emphasizing ease of learning and implementation. Additionally, it covers topics like model saving, inference making, and packaging into a library. The host also recommends additional Python development courses for viewers interested in deepening their understanding.

Takeaways

  • 😀 The tutorial aims to correct a previous lesson by showing how to build a neural network from scratch, introducing basic concepts and principles of neural networks.
  • 🙂 It demonstrates the entire process of creating a neural network in Python, including writing less than 100 lines of code for the task.
  • 🙌 The tutorial covers various foundational topics such as neuron bias, activation functions like the rectified linear unit (ReLU) and sigmoid, and the importance of these concepts.
  • 📝 The practical example focuses on teaching the neural network to recognize handwritten digits using the public MNIST dataset, which contains 60,000 training images.
  • 📱 Highlighting the neural network's architecture, the video explains the structure of neural networks including input, hidden, and output layers, and how they are connected.
  • 📚 Discusses the process of initializing weights randomly as a common practice and explains its significance in the neural network's ability to learn.
  • 📈 Offers insights on saving and inferring with a trained model, and even packaging it into a genuine neural network library.
  • 🚀 Emphasizes the compactness and efficiency of neural networks by mentioning that the core part of the network can be encapsulated in just six lines of code.
  • 👨‍💻 Introduces additional learning resources for Python and neural networks, encouraging further exploration and mastery of these technologies.
  • 😃 Concludes with a successful demonstration of the neural network's ability to recognize a digit it hadn't encountered in the training set, underscoring the effectiveness of the teaching method.

Q & A

  • What was the main reason for creating a new lesson on neural networks?

    -The main reason was to address feedback from a previous lesson that focused on working with TensorFlow and PyTorch, and instead explain how to write a neural network from scratch.

  • What is the goal of the lesson mentioned in the script?

    -The goal is to fix the situation by introducing the basic principles of neural networks from scratch, including neurons, bias, and different activation functions, and to teach how to save a trained model and perform inference.

  • How many training images does the public dataset mentioned in the script contain?

    -The public dataset contains 60,000 training images.

  • What is the complexity of the neural network code mentioned in the script?

    -The neural network is written in less than 100 lines of code, with the most complex part fitting into just 6 lines.

  • What example is used in the script to illustrate how our brain recognizes handwritten digits?

    -The example used is recognizing the handwritten digit '3', demonstrating how our brain's neural network can identify it despite variations in handwriting.

  • What libraries are recommended to install for following along with the lesson?

    -It's recommended to install NumPy for mathematical operations and Matplotlib for data visualization.

  • What are the two matrices used in the neural network's simplified example?

    -The first matrix connects the input layer to the hidden layer and has a shape of 4x5. The second matrix connects the hidden layer to the output layer and has a shape of 3x4.

  • Why is it important to initialize the weights of a neural network randomly?

    -Random initialization of weights is important because it affects the neural network's ability to learn. If there was a way to initialize weights correctly from the beginning, there would be no need for training.

  • What is the role of a bias neuron in a neural network?

    -A bias neuron is used to adjust the shift of the activation function graph to the left or right, helping to better fit the model.

  • How did the neural network perform in recognizing handwritten digits after training?

    -After three epochs of training, the neural network learned to recognize handwritten digits with an accuracy of up to 93%.

Outlines

00:00

🧠 Introduction to Neural Networks

This segment addresses previous criticism by detailing how to create a neural network from scratch, explaining the basic principles of neural networks, neuron bias, and activation functions such as rectifiers and softmax. It proposes to teach neural networks through a hands-on approach, using Python to recognize handwritten digits with less than 100 lines of code. The challenge is simplified by focusing on a smaller portion of the neural network that consists of only six lines of code, making the learning process seem less daunting. The example provided involves recognizing the digit 'three' to demonstrate how neural networks mimic the brain's ability to interpret complex patterns through neural connections and synapses.

05:02

📘 Yandex Practicum Python Developer Course

The second paragraph shifts focus to promote a Python Developer course offered by Yandex Practicum, featuring a free introductory part. The course spans nine months, aiming to equip learners with skills necessary for a Python programmer today. It covers backend development, interaction with applications and users, writing first codes, database design with Django, and advanced programming algorithms, including work on real projects. Furthermore, Yandex Practicum offers career support by helping students build portfolios, prepare for interviews, and write resumes, presenting this course as a valuable opportunity for aspiring programmers.

10:03

🔬 Understanding Neural Networks and Bias Neurons

This part delves into the practical aspects of neural networks, beginning with the significance of bias neurons that enable shifts in the activation function's graph, enhancing the network's flexibility in pattern recognition. It also introduces the EMNIST dataset, comprising 60,000 images of handwritten digits used for training. The narrative then guides through preparing this dataset for neural network training, emphasizing color inversion and reshaping to fit the input layer of the neural network, laying the groundwork for implementing the network in Python.

15:04

👨‍🏫 Training the Neural Network

This section focuses on the neural network training process, detailing steps such as initializing weights, forward propagation for processing input data through layers, applying activation functions, and calculating losses using mean squared error. It stresses the importance of adjusting the weights during training to improve accuracy, a process encapsulated within the backpropagation algorithm. This intricate process is simplified to six lines of code, demonstrating the network's learning capability by achieving 93% accuracy in recognizing handwritten digits, underscoring the practical application and effectiveness of the training method outlined.

💾 Saving and Testing the Neural Network

The final paragraph discusses saving the trained model for future use and extending it into a custom neural network library, suggesting potential for broader application and ease of use. It concludes with testing the model on a newly created digit image outside the training set, validating the network's ability to generalize and recognize digits not previously encountered during training. This test serves as proof of the neural network's learning efficiency and adaptability, marking a successful end to the tutorial.

Mindmap

Highlights

Introduction to building a neural network from scratch in Python.

Explanation of basic neural network principles.

Introduction to neuron bias and different activation functions.

Demonstration on how to save a trained neural network model.

Guidance on performing inference with a trained model.

Instructions for packaging a neural network into a library.

Utilizing the MNIST dataset to teach neural network handwritten digit recognition.

Explanation of neural network layers and neuron connections.

Insights into the importance of random initialization for weights.

Tutorial on loading and processing the MNIST dataset for neural network training.

Details on the significance of the neuron bias in neural networks.

Comparison of various activation functions.

Step-by-step guide to neural network training process.

Introduction to backpropagation and weight adjustment.

Results showcasing the neural network's ability to recognize handwritten digits with high accuracy.

Practical demonstration of neural network inference with custom images.

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)

Related Tags
Neural NetworksPython TutorialMachine LearningActivation FunctionsBias NeuronsMNIST DatasetHandwritten DigitsCode SimplificationAI DevelopmentPython Programming