Реализация нейронной сети с помощью языка программирования Python

<<Ш11ШетиМ~^©и©Ма1>#9(Ш,2©2© / TECHNICAL science

9

TECHNICAL SCIENCE

УДК 004.432.2

Альбовский Александр Владимирович, Егоров Никита Андреевич, Романюк Анастасия Георгиевна Московский государственный технический университет им. Н.Э. Баумана

DOI: 10.24411/2520- 6990-2020-11582 РЕАЛИЗАЦИЯ НЕЙРОННОЙ СЕТИ С ПОМОЩЬЮ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON

Albovsky Alexander, Egorov Nikita, Romanyuk Anastasia

Bauman Moscow State Technical University

IMPLEMENTATION OF A NEURAL NETWORK USING THE PYTHON PROGRAMMING

LANGUAGE

Аннотация

Статья посвящена анализу подходов к созданию нейронных сетей в различных библиотеках высокоуровневого языка программирования Python. Рассмотрены подходы к созданию нейронных сетей в среде разработки Python. Исследованы ключевые возможности и особенности указанных библиотек. Проведен сравнительный анализ создаваемых нейронных сетей с точки зрения объектно-ориентированного языка программирования.

Abstract

The article analyzes approaches to creating neural networks in various libraries of the high-level Python programming language. Approaches to creating neural networks in the Python development environment are considered. The key features and features of these libraries are investigated. A comparative analysis of the created neural networks from the point of view of an object-oriented programming language is carried out

Ключевые слова: Python, машинное обучение, NumPy, SciKit-Learn, TensorFlow, Theano, Keras, PyTorch, программирование

Keywords: Python, machine learning, NumPy, SciKit-Learn, TensorFlow, Theano, Keras, PyTorch, programming

Введение

Библиотека в программировании - это готовый набор объектов, классов, методов, используемых для разработки программ [1]. При решении определенной задачи перед специалистом не стоит необходимость каждый раз создавать всё с нуля, существуют готовые библиотеки, где сделана реализация необходимых функций, а также разработаны механизмы оптимизации вычислений. Использование библиотек - это составляющая функционального подхода к написанию программ. Python - высокоуровневый объектно-ориентированный язык программирования. Для целей машинного обучения реализовано множество библиотек.

NumPy, Pandas и Matplotlib

NumPy - фундаментальный пакет Python. В его функционал входит создание и осуществление операций с N-мерными массивами. В нем также реализован механизм векторизации, за счет чего NumPy

повышает производительность и, соответственно, ускоряет выполнение операций.

Pandas - это пакет, предназначенный для манипуляций с данными. Кроме математических вычислений, обеспечивает их агрегацию и визуализацию.

Matplotlib - основной инструмент визуализации данных на языке Python. Библиотека сама по себе является низкоуровневой, что означает большой объём кода для визуализации, но является высоко производительной.

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

10

TECHNICAL SCIENCE / <<Ш11ШетиМ~^©иГМа1>#9(Ш,2©2©

HIl_neurons = L5C

input_HLl_weights = numpy. random, ишгэгл : 1qw=-; . 1, higf.= 0 . 1, 3ize=

HL2_neurc(ii3 = 60

HI1 !-!L2 weights = пишру. r andean,unifогзе

ou-put. пеиюпз = 4

HL2_rutpu"3_f Teichas = r.unipy. random.un^f оси : low=-0 . 1, rjigh=0.1T 3ize=

Рисунок 1.

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

ЗсЖИ-Ьеагп

Это библиотека, предназначенная для решения задач классического машинного обучения. Имеет множество алгоритмов обучения как с учителем, так и без него. SciKit-Leam не поддерживает параллельные вычисления, поэтому она не является оптимальным решением в задачах глубокого обучения.

Алгоритмы, реализованные в библиотеке, предполагают, что данные будут храниться в двумерном массиве или матрице. SciKit-Learn ожидает, что размер массива будет [п_Батр1е5, n_fea-Ште8], где п_5атр1еБ - количество выборок (это может быть документ, картинка, звук, объект, который может быть описан с помощью фиксированного набора количественных характеристик); n_features - количество признаков (отличительных черт, которые можно использовать для количественного описания каждого элемента). Количество объектов необходимо зафиксировать заранее.

Рассмотрим работу с НС с помощью 8сЖй-Leam (рис. 2):

from sklearn. neural_netwonk Import HLIPClassifien

nip = HLPClassifier

Рисунок 2.

Результатом применения библиотеки является НС, как объект. А вот функционал библиотеки весьма ограничен, как было указано выше, SciKit-Leam предназначена для классических задач и не применима лишь для создания многослойного пер-цептрона с ограниченной функциональностью. Theano и TensorFlow

Theano - библиотека с открытым исходным кодом, основным разработчиком которого является группа машинного обучения в Монреальском университете. Вычисления в ней выражаются NumPy-подобным синтаксисом и компилируются для эффективных параллельных вычислений как на обычных CPU, так и на GPU [2].

Theano представляет собой препроцессор на языке типа Python для системы вычислений с многомерными массивами данных (тензорами), сочетающей в себе математические пакеты Mathematica и MATLAB. Математический аппарат данной библиотеки поддерживает создание архитектур свёр-точных НС. В ней реализованы функции двумерной свертки и субдискретизации:

convout = conv2d(input=X, filters= W) pooledout = downsample. max_pool_2d( input=conv_out,

ds= poolsize, ignore_border=True)

TensorFlow - это библиотека с открытым исходным кодом от Google. Также, как и Theano, библиотека оперирует тензорами, работает на разных GPU и CPU и обещает масштабируемость машинного обучения без изменения кода программы [3]. Каждая строка кода должна проходить через вычислительный граф, поэтому два вычисления могут выполняться одновременно. Эта библиотека позволяет распределить вычисления по разным CPU или GPU, что в итоге дает значительный выигрыш в вычислительных затратах.

Работа с Tensorflow почти совпадает с кодом в случае Theano, с тем исключением, что некоторые функции имеют дополнительные параметры, позволяющие управлять величиной исходящего изображения.

convout = conv2d(X, W, strides=[ 1, 1, 1, 1], pad-ding='SAME'

convout = bias_add(conv_out, b) poolout = max_pool( convout, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],

<<Ш11ШетиМ~^©и©Ма1>#9(Ш,2©2© / TECHNICAL science

padding='SAME')

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

К недостаткам Theano и TensorFlow следует отнести, то что они, как и NumPy, не создают НС или её слои как объекты. С учетом обстоятельства, что данная библиотека работает с тензорами и существует необходимость самостоятельно создавать все математические операции. Keras

Открытая нейросетевая библиотека, написанная на языке Python. Keras работает поверх машинных библиотек с открытым исходным кодом, таких как TensorFlow, Theano. Keras API можно разделить на три основные категории: модели, слои, модули.

В отличие от описанных ранее библиотек Keras оперирует объектами, не углубляясь в особенности построения математических моделей. В качестве примера создание свёрточной НС: model = Sequential

model.add

model.add

Запуск обучения сети как и у SciKit-Learn происходит в одну команду:

hist = model.fit(x_train, ytrain, valida-tion_data=(xtest, y_test), epochs=1) PyTorch

Это мощный фреймворк глубокого машинного обучения. Библиотека предоставляет две основные высокоуровневые модели:

• Тензорные вычисления (по аналогии с NumPy) с развитой поддержкой ускорения на GPU

• Глубокие НС на базе системы autodiff Приведем код для создания сверточной сети: class ConvNet(nn.Module):

def_init_(self):

super

self.layerl = nn.Sequential(nn.Conv2d(1, 32, ker-nel_size=5, stride=1, padding=2),

nn.ReLU(), nn.MaxPool2d(kernel_size=2,

stride=2))

self.dropout = nn.Dropout

__

Определение слоев создано при помощи _init_. Следующий шаг — определить потоки данных через слои при прямом прохождении через сеть:

defforward(self x):

out = self.layerl

out = out.reshape

out = self.dropout

out = self.fcl

out = self.fc2

return out

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

Заключение После проведенного анализа были получены следующие выводы:

1. Библиотека SciKit-Learn оказалась наименее ценной, так как не имеет масштабируемости и большого функционала.

2. NumPy, Theano и TensorFlow - мощные инструменты для создания НС, однако стоит учитывать необходимость описания архитектуры НС и всех методов в явном виде, что требует существенного уровня подготовки специалиста.

3. Библиотека PyTorch является мощным инструментом для решения задач машинного обучения, однако требует определения некоторых методов в явном виде

4. Библиотека Keras выступает в качестве интерфейса над библиотеками TensorFlow и Theano и создает НС в виде объекта. Является наиболее приемлемой для создания стандартных НС.

Список литературы

1. Волченскова Н.И., Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики, 1984;

2. Джулли А., Пал С. Библиотека Keras - инструмент глубокого обучения. Реализация нейронных сетей с помощью библиотек Theano и TensorFlow = Deep learning with Keras. — ДМК Пресс, 2017. — 294 с.;

3. Сравнение программ глубинного обучения [Электронный ресурс], URL: https://ru.wikipe-dia.org/wiki/Сравнение_программ_глубинного_обу чения (Дата обращения: 10.03.2020);

4. PyTorch — ваш новый фреймворк глубокого обучения [Электронный ресурс], URL: https://habr.com/ru/post/334380/, (Дата обращения: 10.03.2020).