Как создать свою простую нейронную сеть

127 || 24 мая 2024 г. 20:28
Своя нейросеть и её создание: как разработать, на чём написать

Создание и тренировка вашей первой нейросети на Python: пошаговое руководство

Работа с нейронными сетями – это увлекательное занятие, позволяющее решать различные задачи в области машинного обучения. В этой статье мы рассмотрим создание и тренировку нейронной сети прямого распространения (Feedforward Neural Network) для классификации рукописных цифр из популярного набора данных MNIST.

Что такое MNIST?

MNIST – это база данных рукописных цифр, которая часто используется для тестирования алгоритмов машинного обучения. Она содержит 60 тыс. примеров для тренировки и 10 тыс. примеров для тестирования. Каждый пример представляет собой черно-белое изображение размером 28x28 пикселей.

MNIST – база данных рукописных цифр

Подготовка окружения

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

  • numpy
  • matplotlib
  • tensorflow (включая keras)

Устанавливаем нужные библиотеки командами:

pip install numpy matplotlib tensorflow

Загрузка и подготовка данных

Импортируем необходимые модули и загрузим данные MNIST при помощи Keras:

# Импорт необходимых библиотек
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam

# Загрузка датасета MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Нормализация данных от 0 до 1
x_train = x_train.reshape(60000, 784).astype('float32') / 255
x_test = x_test.reshape(10000, 784).astype('float32') / 255

# Преобразуем метки классов в категории
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

Создание модели нейросети

Создание модели нейросети

Теперь создадим модель Feedforward Neural Network с использованием Keras:

# Создание модели нейросети
model = Sequential()
model.add(Dense(units=512, activation='relu', input_shape=(784,)))
model.add(Dense(units=256, activation='relu'))
model.add(Dense(units=10, activation='softmax'))

# Компиляция модели
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])

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

Обучение модели

Теперь можно запустить процесс обучения нашей нейросетевой модели:

# Обучение модели
history = model.fit(x_train, y_train, epochs=10, batch_size=128, validation_data=(x_test, y_test), verbose=2)

Обратите внимание на параметры: epochs – количество эпох обучения; batch_size – размер партий данных при одном шаге обучения; validation_data – данные для оценки качества обучения после каждой эпохи.

Оценка результативности модели

После завершения процесса тренировки оценим результативность работы нашего алгоритма на тестовом датасете:

# Оценка результативности модели
evaluation = model.evaluate(x_test, y_test)
print('Точность тестирования: {:.2f}%'.format(evaluation[1] * 100))

Визуализация результатов

Визуализация результатов

Также полезно построить график точности и потерь в процессе обучения:

# Построение графика точности и потерь в процессе обучения
plt.figure(figsize=(12, 4))

plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Тренировка')
plt.plot(history.history['val_accuracy'], label='Тест')
plt.title('Точность модели')
plt.xlabel('Эпоха')
plt.ylabel('Точность')
plt.legend(loc='upper left')

plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Тренировка')
plt.plot(history.history['val_loss'], label='Тест')
plt.title('Потери модели')
plt.xlabel('Эпоха')
plt.ylabel('Потери')
plt.legend(loc='upper left')

plt.show()

В зависимости от результативности можно корректировать параметры или архитектуру вашей сетевой модели.

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

Это тоже может быть интересно:

Комментарии

*
- обязательно заполнению

Мнения на сайте

Картинка дня

Картинка дня

Популярные статьи