Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Нейронные сети — важная концепция в области искусственного интеллекта и машинного обучения. Они состоят из взаимосвязанных узлов, организованных слоями, и имитируют работу человеческого мозга. Узлы представляют нейроны человеческого мозга.

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

Что такое многоклассовая классификация?

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

Вы можете использовать мультиклассовую классификацию для классификации рукописных изображений из набора данных MNIST по 10 категориям. Этим категориям будут соответствовать цифры от 0 до 9.

instagram viewer

Понимание набора данных MNIST

Набор данных MNIST — это популярный эталонный набор данных для алгоритмов машинного обучения и компьютерного зрения. Он содержит 70 000 рукописных изображений в градациях серого размером 28 на 28 пикселей. Рукописные цифры находятся в диапазоне от 0 до 9.

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

Подготовка вашей среды

Чтобы следовать этому руководству, вы должны быть знакомы с основы Python. Вы также должны иметь базовые знания машинного обучения. Наконец, вам должно быть удобно пользоваться Jupyter Notebook или Google Colab.

Полный исходный код доступен в Репозиторий GitHub.

Создайте новый блокнот Jupyter или войдите в Google Колаб. Запустите эту команду, чтобы установить необходимые пакеты:

!pip установить numpy matplotlib tensorflow opencv-python

Вы будете использовать:

  • Matplotlib для визуализации данных.
  • NumPy для работы с массивами.
  • TensorFlow для создания и обучения вашей модели.
  • OpenCV для подачи модели своими рукописными цифрами.

Импорт необходимых модулей

Импортируйте пакеты, которые вы установили в своей среде. Это позволит вам позже вызывать и использовать их функции и модули в вашем коде.

Импортировать тензорный поток как тф
от тензорный поток Импортировать Керас
Импортировать matplotlib.pyplot как плт
%matplotlib встроенный
Импортировать пустышка как нп
Импортировать cv2

Вторая строка кода импортирует модуль Keras из Библиотека Google TensorFlow. Вы будете использовать Keras для обучения своей глубокой нейронной сети с TensorFlow в качестве серверной части.

Загрузка и просмотр набора данных

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

(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

Проверьте длину обучающих и тестовых наборов. Набор данных MNIST содержит 60 000 изображений для обучения и 10 000 изображений для тестирования.

Лен (X_train)
лен (X_test)

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

X_train[0].форма
X_train[0]
plt.matshow (X_train[0])
y_train[0]

Результат визуализации следующий:

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

Предварительная обработка данных

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

Нормализация значений пикселей

Нормализуйте значения пикселей изображений в наборе данных, разделив каждое значение на 255. Значения пикселей ненормализованного набора данных находятся в диапазоне от 0 до 255, где ноль соответствует черному цвету, а 255 — белому. Разделение каждого значения пикселя на 255 гарантирует, что каждый пиксель находится в диапазоне от 0 до 1. Это облегчает модели изучение соответствующих функций и закономерностей в данных.

X_поезд = X_поезд / 255
Х_тест = Х_тест / 255

Затем напечатайте значения пикселей первого изображения.

X_train[0]

Обратите внимание, что теперь они находятся в диапазоне от 0 до 1.

Преобразование матриц изображений в одномерный массив

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

X_train_flattened = X_train.reshape (длина (X_train), 28 * 28)
X_test_flattened = X_test.reshape (длина (X_test), 28 * 28)
X_train_flattened.shape
X_train_flattened[0]

Теперь ваши изображения готовы для обучения и тестирования модели.

Создание модели глубокой нейронной сети

Создайте последовательную модель с модулем Keras Tensorflow, используя входной слой, два скрытых слоя и выходной слой. Установите входную форму на 28 на 28, так как это форма исходных изображений в наборе данных. Используйте 128 узлов для скрытых слоев. Выходной слой должен иметь только 10 нейронов, так как вы классифицируете только цифры от 0 до 9.

модель = керас. Последовательный([
керас.слои. Сгладить (input_shape=(28, 28)),

керас.слои. Плотный(128, активация='релу'),
керас.слои. Плотный(128, активация='релу'),

керас.слои. Плотный(10, активация='софтмакс')
])

Скомпилируйте модель с помощью Адам оптимизатор, sparse_categorical_crossentropy как функция потерь, а метрика для оценки производительности модели как точность. Затем поместите обучающие данные в модель и установите количество эпох равным пяти.

model.compile (оптимизатор ='Адам',
потеря ='sparse_categorical_crossentropy',
метрики=['точность'])

model.fit (X_train, y_train, эпохи =5)

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

model.evaluate(X_test, y_test)

Функция оценки вернет потери и точность модели. Модель обеспечивает точность 98%.

Использование модели для классификации ваших собственных рукописных цифр

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

Для предварительной обработки изображений:

  1. Загрузите изображение, содержащее цифру, с помощью OpenCV.
  2. Преобразуйте его в оттенки серого и измените размер до 28 на 28 пикселей.
  3. Отразите и нормализуйте значения пикселей.
  4. Наконец, сведите изображение в одномерный массив.

Передайте предварительно обработанное изображение в модель для предсказания и выведите предсказанное значение на экран.

img = cv2.imread ('цифры/digit1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('поплавок32') / 255.0

# Свести изображение в одномерный массив
input_data = img_normalized.flatten().reshape( 1,28,28)

# Сделать прогноз, используя модель
прогноз = model.predict (входные_данные)
Распечатать (f'Прогноз: {np.argmax (прогноз)}')

Передача предварительно обработанного изображения, содержащего номер, в модель.

Вывод модели выглядит следующим образом:

Модель смогла правильно классифицировать цифру семь.

Нейронные сети в чат-ботах

Использование нейронных сетей резко возросло за последние несколько лет. Они преимущественно использовались при обработке естественного языка для языкового перевода и генеративного ИИ.

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