Вероятно, вы уже где-то слышали о Theano, но знаете ли вы, что это такое? Язык программирования? Компилятор? Библиотека Python? На самом деле, всё перечисленное!
Theano был разработан для компиляции, реализации и оценки математических выражений очень эффективным способом. По сути, он позволяет разработчику выполнять код, используя как CPU, так и GPU.
Теперь вы можете задаться вопросом, в чем преимущество выполнения кода на GPU, а не на CPU.
Когда мы выполняем очень дорогой с вычислительной точки зрения код, наш компьютер часто может работать себе в ущерб или даже сломаться в ходе работы.
Кроме того, необходимо учитывать время, необходимое для обучения модели на большом наборе изображений с высоким разрешением. Для обычного компьютера это было бы слишком затратно с точки зрения вычислений.
Но не стоит беспокоиться: использование графического процессора позволит строить модели, работающие с большими наборами данных без больших вычислительных затрат. Графические карты похожи на компактные компьютеры, находящиеся внутри ПК.
Еще одно преимущество графических процессоров заключается в том, что они дешевле центральных процессоров.
В качестве доказательства того, что Theano на GPU может стать будущим машинного обучения и науки о данных, можно привести исследование, проведенное разработчиками Theano. Они обнаружили, что когда библиотека Theano выполнялась на CPU, скорость была в 1,8 раза выше, чем у NumPy. В то время как при работе на GPU Theano оказалась в 11 раз быстрее NumPy.
Друзья, подписывайтесь на наш телеграм канал Pythonist. Там еще больше туториалов, задач и книг по Python.
С тех пор 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».