<<Ш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= (data_i:iicut3 . sh^pe ; , HLl_neurona} )
HL2_neurc(ii3 = 60
HI1 !-!L2 weights = пишру. r andean,unifогзе(low=- J . 1 r high = ü . 1, 3ize= (HLl_nsuraiis, HL2_neurons) )
ou-put. пеиюпз = 4
HL2_rutpu"3_f Teichas = r.unipy. random.un^f оси ■: low=-0 . 1, rjigh=0.1T 3ize= (HL2_neuroiis, üntput r.eurons) )
Рисунок 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(h.iddlen_layer_sizes = (l&J1 13, 10),, max_iter=10@0) mlp.fit(X_train, y_trdin.values.ravel()) predictions = mlp. predic:t{X_test)
Рисунок 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(Conv2D(64, kernel_size=3, activation = 'relu', input_shape=(28,28,1))) model. add(Flatten ())
model.add(Dense(10, activation ='softmax')) model.compile(optimizer='adam', loss='categori-calcrossentropy', metrics=['accuracy'])
Запуск обучения сети как и у 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(ConvNet, self)._init_()
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() self.fc1 = nn.Linear(7 * 7 * 64, 1000) self.fc2 = nn.Linear(1000, 10)
__
Определение слоев создано при помощи _init_. Следующий шаг — определить потоки данных через слои при прямом прохождении через сеть:
defforward(self x):
out = self.layerl (x)
out = out.reshape(out.size(0), -1)
out = self.dropout(out)
out = self.fcl (out)
out = self.fc2(out)
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).