Содержание[Скрывать][Показывать]
В последние годы популярность нейронных сетей возросла, поскольку они показали себя очень хорошо в широком диапазоне задач.
Было показано, что они являются отличным выбором для распознавания изображений и аудио, обработки естественного языка и даже для сложных игр, таких как го и шахматы.
В этом посте я проведу вас через весь процесс обучения нейронной сети. Я упомяну и объясню все шаги по обучению нейронной сети.
Пока я буду проходить шаги, я хотел бы добавить простой пример, чтобы убедиться, что есть и практический пример.
Итак, приходите, и давайте научимся обрабатывать нейронные сети
Давайте начнем с простого и спросим, что нейронные сети в первую очередь.
Что такое нейронные сети?
Нейронные сети — это компьютерное программное обеспечение, которое имитирует работу человеческого мозга. Они могут учиться на огромных объемах данных и выявлять закономерности, которые людям может быть трудно обнаружить.
В последние годы популярность нейронных сетей возросла благодаря их универсальности в таких задачах, как распознавание изображений и аудио, обработка естественного языка и прогнозное моделирование.
В целом, нейронные сети — это мощный инструмент для широкого круга приложений, и у них есть шанс изменить наш подход к широкому кругу задач.
Почему мы должны знать о них?
Понимание нейронных сетей имеет решающее значение, поскольку они привели к открытиям в различных областях, включая компьютерное зрение, распознавание речи и обработку естественного языка.
Нейронные сети, например, лежат в основе последних разработок в области беспилотных автомобилей, сервисов автоматического перевода и даже медицинской диагностики.
Понимание того, как функционируют нейронные сети и как их проектировать, помогает нам создавать новые и изобретательные приложения. И, возможно, это может привести к еще большим открытиям в будущем.
Примечание об учебнике
Как я уже говорил выше, я хотел бы объяснить этапы обучения нейронной сети на примере. Для этого мы должны поговорить о наборе данных MNIST. Это популярный выбор для новичков, которые хотят начать работу с нейронными сетями.
MNIST — это аббревиатура, обозначающая модифицированный национальный институт стандартов и технологий. Это рукописный цифровой набор данных, который обычно используется для обучения и тестирования моделей машинного обучения, особенно нейронных сетей.
Коллекция содержит 70,000 0 фотографий в оттенках серого с рукописными цифрами от 9 до XNUMX.
Набор данных MNIST является популярным эталоном для классификация изображений задания. Он часто используется для преподавания и обучения, поскольку он компактен и с ним легко работать, но при этом он создает сложную задачу для алгоритмов машинного обучения.
Набор данных MNIST поддерживается несколькими платформами и библиотеками машинного обучения, включая TensorFlow, Keras и PyTorch.
Теперь, когда мы знаем о наборе данных MNIST, давайте приступим к обучению нейронной сети.
Основные шаги для обучения нейронной сети
Импортировать необходимые библиотеки
При первом обучении нейронной сети очень важно иметь необходимые инструменты для разработки и обучения модели. Первым шагом в создании нейронной сети является импорт необходимых библиотек, таких как TensorFlow, Keras и NumPy.
Эти библиотеки служат строительными блоками для разработки нейронной сети и предоставляют важные возможности. Комбинация этих библиотек позволяет создавать сложные проекты нейронных сетей и быстро обучать их.
Чтобы начать наш пример; мы импортируем необходимые библиотеки, в том числе TensorFlow, Keras и NumPy. TensorFlow — это платформа машинного обучения с открытым исходным кодом, Keras — высокоуровневый API нейронной сети, а NumPy — библиотека Python для числовых вычислений.
import tensorflow as tf
from tensorflow import keras
import numpy as np
Загрузите набор данных
Теперь набор данных должен быть загружен. Набор данных — это набор данных, на которых будет обучаться нейронная сеть. Это может быть любой тип данных, включая фотографии, аудио и текст.
Крайне важно разделить набор данных на две части: одну для обучения нейронной сети и другую для оценки правильности обученной модели. Для импорта набора данных можно использовать несколько библиотек, в том числе TensorFlow, Keras и PyTorch.
В нашем примере мы также используем Keras для загрузки набора данных MNIST. В наборе данных 60,000 10,000 обучающих фотографий и XNUMX XNUMX тестовых изображений.
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Предварительно обработайте данные
Предварительная обработка данных — важный этап обучения нейронной сети. Это влечет за собой подготовку и очистку данных перед их подачей в нейронную сеть.
Масштабирование значений пикселей, нормализация данных и преобразование меток в однократное кодирование являются примерами процедур предварительной обработки. Эти процессы помогают нейронной сети учиться более эффективно и точно.
Предварительная обработка данных также может помочь свести к минимуму переоснащение и повысить производительность нейронной сети.
Вы должны предварительно обработать данные перед обучением нейронной сети. Это включает в себя изменение меток на однократное кодирование и масштабирование значений пикселей от 0 до 1.
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, 10)
test_labels = keras.utils.to_categorical(test_labels, 10)
Определите модель
Процесс определения модели нейронной сети включает определение ее архитектуры, такой как количество слоев, количество нейронов на слой, функции активации и тип сети (упреждающая, рекуррентная или сверточная).
Используемый вами дизайн нейронной сети определяется типом проблемы, которую вы пытаетесь решить. Четко определенный дизайн нейронной сети может помочь в обучении нейронной сети, сделав его более эффективным и точным.
Пришло время описать модель нейронной сети. Для этого примера используйте простую модель с двумя скрытыми слоями, каждый из которых содержит 128 нейронов, и выходной слой softmax, содержащий 10 нейронов.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
Скомпилируйте модель
Функция потерь, оптимизатор и метрика должны быть указаны во время компиляции модели нейронной сети. Способность нейронной сети правильно прогнозировать результат измеряется функцией потерь.
Для повышения точности нейронной сети во время обучения оптимизатор изменяет ее веса. Эффективность нейронной сети во время обучения оценивается с помощью метрик. Модель должна быть создана до обучения нейронной сети.
В нашем примере мы должны сейчас прямо сейчас построить модель.
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Тренировать модель
Передача подготовленного набора данных через нейронную сеть при изменении весов сети для минимизации функции потерь называется обучением нейронной сети.
Набор данных проверки используется для тестирования нейронной сети во время обучения, чтобы отслеживать ее эффективность и предотвращать переоснащение. Процесс обучения может занять некоторое время, поэтому важно убедиться, что нейронная сеть правильно обучена, чтобы предотвратить недообученность.
Теперь, используя обучающие данные, мы можем обучить модель. Для этого мы должны определить размер партии (количество выборок, обработанных до обновления модели) и количество эпох (количество повторений во всем наборе данных).
model.fit(train_images, train_labels, epochs=10, batch_size=32)
Оценка модели
Тестирование производительности нейронной сети на тестовом наборе данных — это процесс ее оценки. На этом этапе обученная нейронная сеть используется для обработки тестового набора данных и оценивается точность.
Насколько эффективно нейронная сеть может прогнозировать правильный результат на основе совершенно новых, непроверенных данных, является мерой ее точности. Анализ модели может помочь определить, насколько хорошо работает нейронная сеть, а также предложить способы сделать ее еще лучше.
Наконец, мы можем оценить производительность модели, используя тестовые данные после обучения.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
Вот и все! Мы обучили нейронную сеть обнаруживать цифры в наборе данных MNIST.
От подготовки данных до оценки эффективности обученной модели обучение нейронной сети включает в себя несколько процессов. Эти инструкции помогают новичкам эффективно создавать и обучать нейронные сети.
Новички, которые хотят использовать нейронные сети для решения различных задач, могут сделать это, следуя этим инструкциям.
Визуализация примера
Давайте попробуем визуализировать то, что мы сделали с этим примером, чтобы лучше понять.
Пакет Matplotlib используется в этом фрагменте кода для построения случайного выбора фотографий из набора обучающих данных. Во-первых, мы импортируем модуль «pyplot» Matplotlib и назовем его «plt». Затем с общим размером 10 на 10 дюймов мы делаем фигуру с 5 строками и 5 столбцами подсюжетов.
Затем мы используем цикл for для перебора подграфиков, отображая изображение из набора обучающих данных на каждом из них. Для отображения изображения используется функция «imshow», а для параметра «cmap» установлено значение «серый», чтобы отображать фотографии в оттенках серого. Заголовок каждого подграфика также устанавливается в соответствии с меткой связанного изображения в коллекции.
Наконец, мы используем функцию «показать», чтобы отобразить нарисованные изображения на рисунке. Эта функция позволяет нам визуально оценить выборку фотографий из набора данных, что может помочь нам понять данные и выявить любые возможные проблемы.
import matplotlib.pyplot as plt
# Plot a random sample of images
fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(10,10))
for i, ax in enumerate(axes.flat):
ax.imshow(train_images[i], cmap='gray')
ax.set_title(f"Label: {train_labels[i].argmax()}")
ax.axis('off')
plt.show()
Важные модели нейронных сетей
- Нейронные сети с прямой связью (FFNN): Простой тип нейронной сети, в которой информация перемещается только одним путем, от входного слоя к выходному слою через один или несколько скрытых слоев.
- Сверточные нейронные сети (CNN): Нейронная сеть, которая обычно используется для обнаружения и обработки изображений. CNN предназначены для автоматического распознавания и извлечения признаков из изображений.
- Рекуррентные нейронные сети (RNN): Нейронная сеть, которая обычно используется для обнаружения и обработки изображений. CNN предназначены для автоматического распознавания и извлечения признаков из изображений.
- Сети с долговременной кратковременной памятью (LSTM): Форма RNN, созданная для решения проблемы исчезновения градиентов в стандартных RNN. Долгосрочные зависимости в последовательных данных лучше фиксируются с помощью LSTM.
- Автоэнкодеры: Неконтролируемая обучающаяся нейронная сеть, в которой сеть обучается воспроизводить свои входные данные на своем выходном слое. Сжатие данных, обнаружение аномалий и шумоподавление изображения могут выполняться с помощью автокодировщиков.
- Генеративно-состязательные сети (GAN): Генеративная нейронная сеть — это форма нейронной сети, которая обучена производить новые данные, сопоставимые с обучающим набором данных. GAN состоят из двух сетей: сети генератора, которая создает свежие данные, и сети дискриминатора, которая оценивает качество созданных данных.
Подведение итогов, какими должны быть ваши следующие шаги?
Изучите несколько онлайн-ресурсов и курсов, чтобы узнать больше об обучении нейронной сети. Работа над проектами или примерами — это один из способов лучше понять нейронные сети.
Начните с простых примеров, таких как задачи бинарной классификации или задачи классификации изображений, а затем переходите к более сложным задачам, таким как обработка естественного языка или усиление обучения.
Работа над проектами помогает получить реальный опыт и улучшить навыки обучения нейронных сетей.
Вы также можете присоединиться к онлайн-группам и форумам по машинному обучению и нейронным сетям, чтобы взаимодействовать с другими учащимися и профессионалами, делиться своей работой и получать комментарии и помощь.
ЛРСС МОНРАД-КРОН
⁶Хотелось бы увидеть программу на Python для минимизации ошибок. Специальные узлы выбора для изменения веса на следующий слой