Содержание статьи
Как написать свою первую нейросеть на Python
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — П Ю. Богданов, Е В. Краева, С А. Веревкин, Е Д. Пойманова, Т М. Татарникова
Поскольку нейронная сеть работает с изображениями, необходимо загрузить датасет для ее обучения. Представим пример загрузки Microsoft датасет с разными изображениями кошек и собак, объем датасета — 25 000 изображений, в описании датасета указано, что 1 700 картинок из 25 000 поврежденные, но TensorFlow умеет их фильтровать:
Поскольку все изображения для обучения нейронной сети должны иметь одинаковое разрешение, в переменной SIZE необходимо это указать, например 224*224. Затем проводится нормализация изображений — числовые значения пикселей переводятся в диапазон [0, 1] путем деления значения каждого пикселя на 255:
Рассматриваются примеры проектирования нейронных сетей в Colaboratory, в частности, решение задач распознавания и классификации изображений, прогнозирования. Показано, что для распознавания и классификации изображений может быть использована сверточная нейронная сеть, особенностью которой является получение карты признаков изображения с последующей сверткой. Приведены фрагменты программного кода для этапов подключения необходимых библиотек, загрузки датасетов, нормализации изображений, сборки нейронной сети и ее обучения.
Больше мощностей. Нейронные сети работают с матрицами, так что если нейронов много, вычисления получаются очень ресурсоемкие. Известные нейросети вроде Midjourney или ChatGPT — это сложные и «тяжелые» системы, для их работы нужны сервера с мощным «железом». Так что написать собственный DALL-E на домашнем компьютере не получится. Но есть сервисы для аренды мощностей: ими как раз пользуются инженеры машинного обучения, чтобы создавать, обучать и тестировать модели.
Помимо того, что в Colaboratory можно писать и выполнять код Python в браузере, не требуется настройка сервиса, имеется бесплатный доступ к графическим процессорам и документам других пользователей. Все это делает облачный сервис Colaboratory доступным решением для обучения студентов основам нейронных сетей.
Распространенными задачами, для решения которых привлекаются нейронные сети, являются: классификация — разделение данных по значимым признакам, прогнозирование — предсказывание следующего шага, распознавание -анализ изображения (объекта) с дальнейшей классификацией [4, 5].
Например, на вход поступает картинка. Чтобы нейросеть могла понять, что на ней изображено, она должна выделить разные элементы из картинки, распознать их и подумать, что означает сочетание этих элементов. Примерно так работает зрительная кора в головном мозге. Это несколько задач, их не смогут решить одинаковые нейроны. Поэтому нужно несколько слоев, где каждый делает что-то свое. Для распознавания часто используют так называемые сверточные нейросети. Они состоят из комбинации сверточных и субдискретизирующих слоев, каждый из которых решает свою задачу.
но). Слой пулинга представляет собой нелинейное уплотнение карты признаков, при котором группа пикселей уплотняется до одного пикселя, проходя нелинейное преобразование. Полносвязный слой выполняет нелинейные преобразования извлеченных признаков и собственно реализует классификацию. Для решения проблемы переобучения используется метод Dropout(0.2), где 0.2 — доля нейронов, случайно выключаемых из процесса обучения.
Что такое нейросеть
Давайте поймем почему формула имеет такой вид. Сначала нам нужно учесть то, что мы хотим скорректировать вес пропорционально размеру ошибки. Далее ошибка умножается на значение, поданное на вход нейрона, что, в нашем случае, 0 или 1. Если на вход был подан 0, то вес не корректируется. И в конце выражение умножается на градиент сигмоиды. Разберемся в последнем шаге по порядку:
Задача предсказания (прогноза), решаемая нейронной сетью, заключается в получении на выходном слое ожидаемого значения при подаче на входной слой соответствующих данных. В рассматриваемой задаче нет строгой математической функции, связывающей строку входных данных с выходными, поэтому и предлагается использовать нейронную сеть. Обученная нейронная сеть должна определить статистическое соответствие между входными и выходными данными — результат коррелирует с крайним левым столбцом входных данных. Обратное распространение ошибок заключается в подсчете подобной статистики при создании нейронной сети.
Но нейронные сети — все же не человеческий мозг. Мозг сложнее, объемнее, в нем намного больше нейронов, чем в любой компьютерной нейросети. Поэтому чрезмерное обучение может сделать хуже. Например, переобученная нейросеть может начать распознавать предметы там, где их нет — так люди иногда видят лица в фарах машин и принимают пакеты за котов. А в случае с искусственной нейронной сетью такой эффект еще явнее и заметнее. Если же учить нейросеть на нескольких разнородных данных, скажем, сначала обучить считать числа, а потом — распознавать лица, она просто сломается и начнет работать непредсказуемо. Для таких задач нужны разные нейросети, разные структуры и связи.
После обучения нейронная сеть будет выдавать числовые результаты, по значениям которых осуществляется классификация: если результат значительно больше 1, то высока уверенность в определении метки класса «собаки», если результат намного меньше 0, то изображению присваивается метка класса «кошки» (рис. 2).
Для программирования нейронных сетей в настоящее время наиболее часто используется язык Python благодаря множеству библиотек с набором встроенных математических функций, таких как произведение векторов, транспонирование и тому подобное. Например, используя библиотеку Numpy, можно разработать простую нейронную сеть, решающую задачу прогнозирования. Библиотека Keras применяется при программировании сетей прямого распространения и решения задач распознавания речи. Для нейронных сетей, работающих с изображениями, необходимо подключение другого модуля, например TensorFlow [6].
В последние годы методы глубинного обучения — нейронные сети — позволили достичь впечатляющих успехов в таких областях, как компьютерное зрение, обработка естественного языка, обработка аудио [1, 2]. Нейронные сети используются для решения сложных задач, которые требуют аналитических вычислений, подобных выполняемым человеческим мозгом. Бытует мнение, что нет таких задач, с которыми не может справиться нейронная сеть, только было бы достаточно примеров для ее обучения [3].