- PVSM.RU - https://www.pvsm.ru -

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных

Большие данные и их анализ играют важнейшую роль в современном мире, где повсеместно используются сети и электронные устройства. Идет непрерывное объединение возможностей больших данных, аналитики и машинного/глубинного обучения. В декабре 2016 года мы создали BigDL [1] — распределенную библиотеку глубинного обучения с открытым исходным кодом для Apache Spark [2]. Цель создания этой библиотеки — объединение сообщества глубинного обучения и сообщества больших данных. Далее в этой статье приводится описание недавних усовершенствований в выпуске BigDL 0.1.0 [3] (а также в предстоящем выпуске 0.1.1).

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных - 1

Поддержка Python

Python является одним из наиболее широко используемых языков в сообществе больших данных и интеллектуального анализа данных. В BigDL реализована полная поддержка API-интерфейсов Python [4] (используется Python 2.7) на основе PySpark [5] с выпуска 0.1.0. Благодаря этому пользователи могут использовать модели глубинного обучения в BigDL вместе с существующими библиотеками Python (например, NumPy [6] и Pandas [7]), которые автоматически запускаются в распределенной архитектуре для обработки больших объектов данных в кластерах Hadoop*/Spark. Например, можно создать модель LeNet-5 [8], классическую сверточную нейросеть, с помощью API-интерфейсов Python BigDL следующим образом [9].

def build_model(class_num):
   model = Sequential()
    model.add(Reshape([1, 28, 28]))
    model.add(SpatialConvolution(1, 6, 5, 5).set_name('conv1'))
    model.add(Tanh())
    model.add(SpatialMaxPooling(2, 2, 2, 2).set_name('pool1'))
    model.add(Tanh())
    model.add(SpatialConvolution(6, 12, 5, 5).set_name('conv2'))
    model.add(SpatialMaxPooling(2, 2, 2, 2).set_name('pool2'))
    model.add(Reshape([12 * 4 * 4]))
    model.add(Linear(12 * 4 * 4, 100).set_name('fc1'))
    model.add(Tanh())
    model.add(Linear(100, class_num).set_name('score'))
    model.add(LogSoftMax())
    return model

Кроме того, мы продолжаем развивать поддержку Python в BigDL; в предстоящем выпуске BigDL 0.1.1 будет добавлена поддержка Python 3.5 [10], а пользователи получат возможность автоматически развертывать индивидуальные зависимые компоненты Python в кластерах YARN [11].

Интеграция «записных книжек»

Благодаря полной поддержке API-интерфейсов Python в BigDL специалисты по исследованиям и анализу данных могут работать с данными, применяя мощные «записные книжки» (например, Jupyter Notebook [12]) с распределенной архитектурой ко всему кластеру, сочетая библиотеки Python, Spark SQL [13]/DataFrames [14] и MLlib [15], модели глубинного обучения в BigDL, а также интерактивные средства визуализации. Например, учебное руководство по Jupyter Notebook [16], входящее в состав BigDL 0.1.0, демонстрирует возможность оценки результата предсказания для модели классификации текста (используя точность и матрицу ошибок [17]) следующим образом.

predictions = trained_model.predict(val_rdd).collect()

def map_predict_label(l):
    return np.array(l).argmax()
def map_groundtruth_label(l):
    return l[0] - 1

y_pred = np.array([ map_predict_label(s) for s in predictions])

y_true = np.array([map_groundtruth_label(s.label) for s in val_rdd.collect()])
acc = accuracy_score(y_true, y_pred)
print "The prediction accuracy is %.2f%%"%(acc*100)

cm = confusion_matrix(y_true, y_pred)
cm.shape
df_cm = pd.DataFrame(cm)
plt.figure(figsize = (10,8))
sn.heatmap(df_cm, annot=True,fmt='d');

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных - 2

Поддержка TensorBoard

TensorBoard [18] — это пакет веб-приложений для анализа и понимания структуры работы и графов программы глубинного обучения. В BigDL 0.1.0 реализована поддержка визуализации [19] с помощью TensorBoard (а также встроенных в «записные книжки» библиотек построения графиков, таких как Matplotlib [20]). Можно настроить программу BigDL так, чтобы она формировала сводную информацию для обучения и/или проверки, как показано ниже (с помощью API-интерфейсов Python).

optimizer = Optimizer(...)
...
log_dir = 'mylogdir'
app_name = 'myapp'
train_summary = TrainSummary(log_dir=log_dir, app_name=app_name)
val_summary = ValidationSummary(log_dir=log_dir, app_name=app_name)
optimizer.set_train_summary(train_summary)
optimizer.set_val_summary(val_summary)
...
trainedModel = optimizer.optimize()

После запуска программы BigDL сохраняются данные о ходе ее работы и результаты ее проверки. После этого можно использовать TensorBoard для визуализации поведения программы BigDL, включая кривые Потери и Пропускная способность на вкладке СКАЛЯРНЫЕ ВЕЛИЧИНЫ (как показано ниже).

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных - 3

Также можно использовать TensorBoard для отображения значений весов, смещения, gradientWeights и gradientBias на вкладках РАСПРЕДЕЛЕНИЕ и ГИСТОГРАММЫ (как показано ниже).

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных - 4

BigDL: глубинное обучение — к услугам пользователей больших данных и исследователей данных - 5

Улучшенная поддержка нейронных сетей с обратными связями (RNN)

Рекуррентные нейросети, то есть нейронные сети с обратными связями (RNN) представляют собой мощные модели для анализа речи, текста, временных последовательностей, данных датчиков и т. п. В выпуске BigDL 0.1.0 реализована всесторонняя поддержка RNN, в том числе различные варианты долгой краткосрочной памяти [21] (LSTM), например управляемые рекуррентные единицы (GRU), LSTM с соединениями передачи состояния и вывод в рекуррентных нейросетях [22]. Например, можно создать простую модель LSTM (с помощью API Python) следующим образом [23].

model = Sequential()
model.add(Recurrent()
             .add(LSTM(embedding_dim, 128)))
model.add(Select(2, -1))
model.add(Linear(128, 100))
model.add(Linear(100, class_num))

За последние годы мы стали свидетелями крупных достижений в области глубинного обучения. Сообщество глубинного обучения постоянно совершенствует доступные технологии, а благодаря BigDL они становятся более доступными и удобными в использовании для исследователей и инженеров в области интеллектуального анализа данных (эти специалисты не обязаны быть также и экспертами в области глубинного обучения). Мы продолжаем работать над дальнейшим усовершенствованием BigDL после выпуска 0.1 (например, будут добавлены поддержка чтения и записи моделей TensorFlow [24], реализация сверточных нейронных сетей (CNN) для трехмерных изображений [25], рекурсивных сетей и пр.), поэтому пользователи больших данных смогут пользоваться привычными инструментами и инфраструктурой, создавая аналитические приложения на основе алгоритмов глубинного обучения.

Автор: saul

Источник [26]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/263302

Ссылки в тексте:

[1] BigDL: https://github.com/intel-analytics/BigDL

[2] Apache Spark: http://spark.apache.org/

[3] BigDL 0.1.0: https://github.com/intel-analytics/BigDL/tree/v0.1.0

[4] полная поддержка API-интерфейсов Python: https://github.com/intel-analytics/BigDL/wiki/Python-Support

[5] PySpark: http://spark.apache.org/docs/latest/api/python/pyspark.html

[6] NumPy: http://www.numpy.org/

[7] Pandas: http://pandas.pydata.org/

[8] LeNet-5: http://yann.lecun.com/exdb/lenet/

[9] следующим образом: https://raw.githubusercontent.com/intel-analytics/BigDL/v0.1.0/pyspark/dl/models/lenet/lenet5.py

[10] Python 3.5: https://github.com/intel-analytics/BigDL/pull/832

[11] развертывать индивидуальные зависимые компоненты Python в кластерах YARN: https://github.com/intel-analytics/BigDL/pull/706

[12] Jupyter Notebook: http://jupyter.org/

[13] Spark SQL: http://spark.apache.org/sql/

[14] DataFrames: http://spark.apache.org/docs/latest/sql-programming-guide.html

[15] MLlib: http://spark.apache.org/mllib/

[16] учебное руководство по Jupyter Notebook: https://github.com/intel-analytics/BigDL/tree/branch-0.1/pyspark/dl/example/tutorial/simple_text_classification

[17] матрицу ошибок: https://en.wikipedia.org/wiki/Confusion_matrix

[18] TensorBoard: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tensorboard/README.md

[19] поддержка визуализации: https://github.com/intel-analytics/BigDL/wiki/Visualization-with-TensorBoard

[20] Matplotlib: https://matplotlib.org/

[21] долгой краткосрочной памяти: https://en.wikipedia.org/wiki/Long_short-term_memory

[22] вывод в рекуррентных нейросетях: https://arxiv.org/abs/1512.05287

[23] следующим образом: https://github.com/intel-analytics/BigDL/blob/v0.1.0/pyspark/dl/models/textclassifier/textclassifier.py

[24] чтения и записи моделей TensorFlow: https://github.com/intel-analytics/BigDL/pull/800

[25] реализация сверточных нейронных сетей (CNN) для трехмерных изображений: https://github.com/intel-analytics/BigDL/pull/773

[26] Источник: https://habrahabr.ru/post/337056/