Обучение нейронной сети в Keras для распознавания рукописных цифр на Python | Урок 8

Posted by


Keras – это высокоуровневая библиотека для обучения нейронных сетей, написанная на Python. В этом уроке мы рассмотрим обучение сети распознаванию рукописных цифр с помощью Keras. Мы будем использовать набор данных MNIST, который содержит изображения рукописных цифр от 0 до 9.

Шаг 1: Установка Keras
Прежде всего, убедитесь, что у вас установлен Keras. Вы можете установить Keras, выполнив следующую команду:

pip install keras

Кроме того, убедитесь, что у вас установлены следующие библиотеки:

pip install numpy matplotlib tensorflow

Шаг 2: Импорт необходимых библиотек
Давайте начнем с импорта необходимых библиотек:

import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.utils import to_categorical

Шаг 3: Загрузка и предобработка данных
Теперь загрузим набор данных MNIST и предобработаем его:

(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Преобразуем изображения в одномерный массив и нормализуем их
x_train = x_train.reshape((-1, 28, 28, 1)) / 255.0
x_test = x_test.reshape((-1, 28, 28, 1)) / 255.0

# Преобразуем метки в кодировку one-hot
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

Шаг 4: Создание модели нейронной сети
Теперь создадим модель нейронной сети с помощью Keras:

model = Sequential([
    Flatten(input_shape=(28, 28, 1)),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

Шаг 5: Обучение модели
Теперь обучим модель на наборе данных MNIST:

model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test))

Шаг 6: Оценка модели
Наконец, оценим качество модели на тестовом наборе данных:

loss, accuracy = model.evaluate(x_test, y_test)
print(f'Точность: {accuracy * 100}%')

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

0 0 votes
Article Rating
31 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@СарматПересветов
1 month ago

на самом деле в данной задаче нормализацию входных данных делать абсолютно бессмысленно, так как у нас каждый параметр (тоесть пиксель) может лежа в абсолютно одинаковом диапазоне значений. Если диапазоны значений для разных параметров были бы разными, то нормализация была бы необходима.

@xandrviking1113
1 month ago

Спасибо за уроки 🖖👍

@Листик-у3о
1 month ago

Привет, Автор. Не знаю, найдешь ли ты мой комментарий в столь большом количестве уведомлений. Да и не помню, писал ли я тебе что-то подобное…Прости, память на мелочи у меня ужасна😅
Но хочу сказать огромное спасибо за данный плейлист. А также прошу никогда не удалять его. Настолько понятное и бесплатное объяснение я больше нигде не найду. Спасибо за твои труды. Не смотря на малый доход, ты все равно создал его. Еще раз спасибо❤

@RomanUnreal
1 month ago

Если у кого не получается такая же точность распознавания, проверьте, может у вас закончились вычислительные единицы гугл колаб, он теперь ПЛАТНЫЙ.

@deadmorose4741
1 month ago

А есть ссылка на итоговый коллаб?

@uglevod184
1 month ago

вот такой вот RElu…что за relu

@АртёмУльхов
1 month ago

Здравствуйте, спасибо за видео. А вот если у меня есть целая строка из цифр (5 штук), находящихся постоянно на разных расстояниях. Как я могу обучить ai на распознавание строки, пускай даже фиксированного размера.

@user-mu5cj4hv9l
1 month ago

3:45, а вы точно человек, а не нейросеть?)

@ТвойДруг-ы6ъ
1 month ago

Я люблю тебя, лучшее обяснение. Где ты работаеш?

@MurzNN
1 month ago

Будет ли разница в результатах, если подавать вектор по вертикальным строкам изображения, а не горизонтальным? И можно ли подавать трёхмерный входящий вектор? Т.е. не построчно изображение, а сразу в двух измерениях?

@korsman723
1 month ago

Много словоблудия, ноль практики. Структура объясняется очень оторвано от контекста, не понятно и откровенно говоря становится скучно смотреть

@ЮаньКитайский-и6ъ
1 month ago

Невероятно крутой канал! Всё очень понятно объясняет автор. Возник вопрос: а как убирать ошибки, которые рассмотрели в конце? Надеюсь, следующий урок про это!

@ГеоргийТаманский
1 month ago

Спасибо. Хороший материал. Не совсем понятно,как интерпретировать выходные значения вероятности (тайм код 19.33) Это что за цифры проценты или ещё что-то? По идее сумма вероятностей всех классов не может быть больше 1. А здесь 4.78…, 5,05…., 9,99…. итд. Эти цифры как нибудь соотносятся с метрикой точности?

@ВячеславДорофеев-о1б
1 month ago

Ещё раз большое спасибо за классные лекции. По этой лекции остался вопрос по синкасису питона. Нигде не нашёл правила, по которому если координатами списка является список с булевыми компонентами, где у вас maska, то в операторе присваивания выделяются только компоненты true. Это действительно есть такой синтаксис? Он только у python?

@ВячеславДорофеев-о1б
1 month ago

Большое спасибо, Сергей, классно объясняете. Остался вопрос, на который чат gtp так и не ответил правильно: почему кросс энтропия? Ведь значения ноль при умножении на логарифм пресказания убирает из ошибки, а это ошибка и её нужно уменьшать. Чат ответил, что не участвует в предсказании, поэтому не нужен.

@maximbravtsev3648
1 month ago

Огромное спасибо за объяснение базовых основ!

@fruktiliyagoda
1 month ago

Что такое 'camp=plt.cm.binary'? У меня вообще выдаёт, что не существует такого. Удаляю, всё работает

@-USER_NAME
1 month ago

Почти три года ( день в день) изучаю программирование, посидел на разных языках. Но сильнее ваших уроков не встречал . И вот почему. Есть уроки которые объясняют очень простые вещи подробно , таких процентов 70 . Есть уроки которые объясняют ребята с большим опытом ,но они ценят свое время и чаще воспринимают это как способ доп заработка поэтому кратенько сухо . Ещё бывают, толком сам не понял начинает объяснять вижу подчёркнута добрая часть кода , оп затемнение и проект компилируется, у них ,а я плююсь пытаюсь найти решение проблем с версией корявого кода и тд .
И получается в первом случае слишком низкий уровень во втором слишком высокий к которому ещё нужно хорошо подготовиться .
Но вот чтоб так подробно, такие сложные вещи, это что то не с этой планеты . Спасибо вам большое, счастья,здоровья, долгих лет . 😁

@ДмитрийАлексеев-ц5щ
1 month ago

Сергей, Вы большой молодец. Спасибо за курсы!!! Я очень рад, что нашел Ваш канал=)

@sledleo
1 month ago

Шеф, супер тема! И подача просто огонь, даже тупым как я доходит слёту!
Спасибо за труды и просвещение нас недалеких!!! Респект!!!!