Практическое руководство по Theano

Вероятно, вы уже где-то слышали о Theano, но знаете ли вы, что это такое? Язык программирования? Компилятор? Библиотека Python? На самом деле, всё перечисленное!

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

Теперь вы можете задаться вопросом, в чем преимущество выполнения кода на GPU, а не на CPU.

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

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

Но не стоит беспокоиться: использование графического процессора позволит строить модели, работающие с большими наборами данных без больших вычислительных затрат. Графические карты похожи на компактные компьютеры, находящиеся внутри ПК.

Еще одно преимущество графических процессоров заключается в том, что они дешевле центральных процессоров.

В качестве доказательства того, что Theano на GPU может стать будущим машинного обучения и науки о данных, можно привести исследование, проведенное разработчиками Theano. Они обнаружили, что когда библиотека Theano выполнялась на CPU, скорость была в 1,8 раза выше, чем у NumPy. В то время как при работе на GPU Theano оказалась в 11 раз быстрее NumPy.

Хотите скачать книги по Python в 2 клика? Тогда вам в наш телеграм канал PythonBooks 

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

Более того, Theano основана на NumPy, что делает ее подходящей для тех, кто уже знаком с этой библиотекой. Если вы хотите узнать больше о Theano, то можете посетить сайт библиотеки.

К сожалению, в настоящее время Theano больше не поддерживается, но она по-прежнему является хорошим ресурсом в области ML и Data Science.

Первые шаги с Theano

После всей этой теории давайте напишем простой скрипт, использующий Theano. Но перед этим нам нужно установить Theano через Conda. Обратите внимание: то, что мы будем делать в этом руководстве, будет работать только в том случае, если вы используете Anaconda. Если у вас ее еще нет, скачайте ее здесь.

От редакции Pythonist: об Anaconda и ее установке можно почитать в статье «Развертываем Anaconda – дистрибутив Python для data science».

conda install theano

В коде theano можно выделить три основных этапа:

  • инициализация переменных
  • компиляция кода
  • выполнение кода
import theano
from theano import tensor as T

# Step 1: Initialize

v0 = T.scalar()
v1 = T.scalar()
v2 = T.scalar()
output = v1 * v0 + v2

# Step 2: Compile
t_funct = theano.function(inputs=[v1, v0, v2], outputs=output)

# Step 3: Execute
print(t_funct(2.0, 1.0, 0.50))

Но это все еще не очень понятно. Давайте разберем написанный нами код построчно:

  • 1-2: Импортировали theano и подпакет tensor под именем T.
  • 6-8: Определили экземпляры v0,v1,v2 TensorVariables, которые будут использоваться для расчета выходных данных.
  • 9: Определили, каким должен быть выход выражения, в данном случае это v1 - v0 + v2.
  • 12: Скомпилирована функция t_funct TheanoFunction для вычисления вывода, определенного на предыдущем шаге (строка 9).
  • 15: Здесь мы вызываем функцию TheanoFunction, скомпилированную на предыдущем шаге (строка 12).

Короче говоря, этот скрипт принимает целое число 2.0 за v1, 1.0 за v0 и 0.50 за v2. Затем он вычисляет выход, который мы определили в строке 9:

v1 - v0 + v2

Интуитивно вычисления, которые будет выполнять наша TheanoFunction, выглядят следующим образом:

2.0 - 1.0 + 0.5 = 2.5

Выполнив этот код, вы увидите на выходе 2.5, как и ожидалось.

Выполнение кода Theano на GPU

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

Прежде всего, необходимо установить некоторые различия между видеокартами Intel и NVIDIA. Иногда это сравнение не требуется, но в большинстве случаев оно необходимо.

Если у вас видеокарта NVIDIA, то вам придется использовать Cuda, а если видеокарта Intel, то Open-CL. Не волнуйтесь, ничего устанавливать не придется, кроме пакета Python: pygpu. Для его установки набираем в терминале:

conda install pygpu

Помните, что необходимо использовать anaconda, с pip ничего не получится.

Теперь необходимо изменить конфигурацию Theano, чтобы код работал на GPU. Если у вас видеокарта Intel, откройте терминал и введите:

export THEANO_FLAGS=device=opencl0:1,floatX=float32

А если у вас видеокарта NVIDIA, то введите следующее:

export THEANO_FLAGS=device=cuda,floatX=float32

Эта команда позволит задействовать GPU при выполнении кода, использующего Theano.

Поскольку я не использую Windows, я не могу точно сказать, как выполнить код с использованием GPU в Windows. Но не волнуйтесь, пользователи Microsoft: в официальной документации по Theano вы найдете объяснение, как это сделать.

Тем не менее, мы можем проверить, выполняется ли код на нашем GPU после выполнения команды:

import theano
print(theano.config.device)

Запустив этот скрипт из терминала, мы увидим в качестве вывода используемое устройство. В качестве выходных данных вы должны увидеть не cpu, а что-то вроде cuda или opencl0:1.

Поздравляем, вы впервые запустили свой код на GPU!

Теперь, когда вы освоили некоторые основы Theano, вы готовы к более сложным задачам.

Сигмоидная функция в Theano

Сигмоидная функция - это математическая функция, имеющая характерную "S"-образную или сигмоидальную кривую. Частым примером сигмоидной функции является логистическая функция, определяемая формулой (Википедия):

Эта функция часто используется в машинном обучении для логистической регрессии. Сейчас мы воспроизведем эту функцию с помощью Theano:

import theano
import theano.tensor as T
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5,5,100)
sym_x = T.dscalar('x')
sym_sigmoid = 1./(1. + T.exp(-sym_x))
th_sigmoid = theano.function(inputs=[sym_x], outputs=sym_sigmoid)
sigmoid_output = []
for element in x:
    sigmoid_output.append(th_sigmoid(element))
plt.plot(x,sigmoid_output)
plt.show()

Давайте разберем этот код построчно:

  • 1-4: Импортируем необходимые модули. Мы будем использовать Theano для создания и вычисления сигмоидной функции, а Matplotlib — для построения графиков результатов. Наконец, мы будем использовать NumPy для создания входных данных.
  • 6: Используем NumPy и ее подмодуль Linspace для создания 100 целых чисел, которые будут нашими входными данными. Для этого мы взяли 100 чисел в диапазоне от -5 до 5.
  • 7: Определяем переменную TensorVariable, которая в формуле функции (f(x)) будет представлять собой x:
  • 8: Определяем, каким должен быть выход выражения, в данном случае это 1/(1+(e**-x)).
  • 9: Компилируем TheanoFunction th_sigmoid для вычисления вывода, определенного на предыдущем шаге (строка 8).
  • 10: Определяем список, который будет содержать все результаты нашей функции.
  • 11-12: Для каждого числа в массиве x, определенном в строке 6, мы вычисляем выход и добавляем его в список, определенный в строке 10.
  • 13-14: Используя Matplotlib, Python отобразит все выходы, которые вычислила наша сигмоидная функция.

Здесь мы также выполнили три основных шага, о которых говорили в начале статьи:

  • Инициализация переменных → Строки 6-8
  • Компиляция кода → Строка 9
  • Выполнить код → Строки 11-12

Запустив этот код, вы должны увидеть, что скрипт открыл на вашем компьютере окно Python3, в котором отображается следующее:

Отлично! Это именно тот результат, который должна давать сигмоидная функция! Фактически, это и есть та самая «S»-образная кривая:

Заключение

Из этого руководства вы узнали, как установить библиотеку Theano и как написать простой код, использующий ее. Затем мы разобрали, как выполнить Python-скрипт, использующий Theano, на GPU вашего компьютера, что может значительно повысить производительность вашего проекта. Наконец, мы показали, как с помощью этой библиотеки воспроизводить одну из самых известных функций машинного обучения — сигмоидную функцию, также называемую логистической.

Я рекомендую вам продолжить изучение Theano, поскольку то, что мы рассмотрели в этой заметке, — лишь малая часть ее возможностей. Один из лучших способов продолжить изучение библиотеки — обратиться к ее официальной документации.

Перевод статьи «Hands-On Theano: One of the Most Powerful Scientific Tools for Python».