Вероятно, вы уже где-то слышали о 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 через 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))
Но это все еще не очень понятно. Давайте разберем написанный нами код построчно:
T.v0,v1,v2 TensorVariables, которые будут использоваться для расчета выходных данных.v1 - v0 + v2.t_funct TheanoFunction для вычисления вывода, определенного на предыдущем шаге (строка 9).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 необязательно: вы вполне можете выполнять свой код на 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, вы готовы к более сложным задачам.
Сигмоидная функция - это математическая функция, имеющая характерную "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() Давайте разберем этот код построчно:
f(x)) будет представлять собой x:1/(1+(e**-x)).th_sigmoid для вычисления вывода, определенного на предыдущем шаге (строка 8).x, определенном в строке 6, мы вычисляем выход и добавляем его в список, определенный в строке 10.Здесь мы также выполнили три основных шага, о которых говорили в начале статьи:
Запустив этот код, вы должны увидеть, что скрипт открыл на вашем компьютере окно Python3, в котором отображается следующее:
Отлично! Это именно тот результат, который должна давать сигмоидная функция! Фактически, это и есть та самая «S»-образная кривая:
Из этого руководства вы узнали, как установить библиотеку Theano и как написать простой код, использующий ее. Затем мы разобрали, как выполнить Python-скрипт, использующий Theano, на GPU вашего компьютера, что может значительно повысить производительность вашего проекта. Наконец, мы показали, как с помощью этой библиотеки воспроизводить одну из самых известных функций машинного обучения — сигмоидную функцию, также называемую логистической.
Я рекомендую вам продолжить изучение Theano, поскольку то, что мы рассмотрели в этой заметке, — лишь малая часть ее возможностей. Один из лучших способов продолжить изучение библиотеки — обратиться к ее официальной документации.
Перевод статьи «Hands-On Theano: One of the Most Powerful Scientific Tools for Python».
Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…