Рубрики
Без рубрики

Theano Python Tutorial

Theano, Python Theano, Theano, Theano Neural Network, Theano Device Machine, Theano Deep Meeting, Theano Expression, Функция, Градиент, TheAno Tensor, Theano Matrix Функция Пример Учебности.

Автор оригинала: Pankaj Kumar.

Theano – это численная библиотека вычислений для Python. Это общий выбор для внедрения моделей нейронных сетей, поскольку он позволяет эффективно определять, оптимизировать и оценивать математические выражения, включая многомерные массивы (numpy.ndaray) Отказ

Theano Python

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

Theano получил удивительный компилятор, который может выполнять различные оптимизации различной сложности. Несколько таких оптимизаций:

  1. Арифметическое упрощение (например, --x -> x; x + y - x -> y )
  2. Использование псевдонима памяти, чтобы избежать расчета
  3. Постоянная складка
  4. Объединение аналогичных подграфов, чтобы избежать избыточных расчетов
  5. Степление петли для элементарных подпроекций
  6. ГПУ вычисления

Вы можете увидеть полный список оптимизаций здесь.

Почему библиотека Theano Python?

Обычно мы манипулируем матрицами, используя Numpy Package, так что сделать Theano лучше, чем любой такой пакет!

Theano – это своего рода гибрид между Numpy и Sympy, предпринимается попытка комбинировать два в одну мощную библиотеку. Давайте посмотрим на некоторые преимущества над другими:

  • Оптимизация устойчивости: Theano может узнать некоторые нестабильные выражения и могут использовать более стабильные средства для их оценки
  • Оптимизация скорости исполнения: Как упоминалось ранее, Theano может использовать последние GPU и выполнять части выражений в вашем процессоре или GPU, что делает его намного быстрее, чем Python
  • Символическая дифференциация: Theano достаточно умно, чтобы автоматически создавать символические графики для вычислительных градиентов

Ну, достаточно теории, давайте начнем работать над примером.

Theano Tutorial

Чтобы начать работу с Theano, установите его, используя PIP, как показано на изображении ниже.

Экспрессия теано в Callable объекты

С Theano мы можем конвертировать выражения в Callable объекты. Давайте посмотрим фрагмент кода:

import theano
from theano import tensor

x = tensor.dscalar()
y = tensor.dscalar()

z = x + y
f = theano.function([x,y], z)
print(f(1.5, 2.5))

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

  • Начнем с объявления двух символических скалелярей или переменных с плавающей точкой
  • Затем мы создали простое выражение для суммы двух чисел
  • После выражения мы преобразуем выражение в Callable объект, который занимает (х, у) в качестве ввода и возвращает значение для z После вычисления
  • Наконец, мы называем функцию с некоторыми параметрами и распечатаем результаты

Логистическая функция

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

import theano
from theano import tensor

# declare a variable
x = tensor.dmatrix('x')

# create the expression
s = 1 / (1 + tensor.exp(-x))

# convert the expression into a callable object which takes
# a matrix as parameter and returns s(x)
logistic = theano.function([x], s)

# call the function with a test matrix and print the result
print(logistic([[0, 1], [-1, -2]]))

Когда мы запускаем сценарий, мы можем увидеть вывод как: все работает нормально, вывод выглядит так же, как и ожидалось. Теперь давайте приблизимся к функциям.

Ближе взглянуть на функцию Theano

Функции Theano помогают в взаимодействии с символическим графом. Они позволяют Theano построить вычислительный график и оптимизировать его.

Типичная функция Theano выглядит так:

f= theano.function([x],y)

Здесь X – список входных переменных, а Y – список выходных переменных. Давайте проверим, как эта функция имеет отличное использование.

Расчет нескольких результатов сразу

Скажем, мы должны вычислить разницу на элемен зрения, абсолютную разницу и разницу в квадрате между двумя матрицами «X» и «y». Делать это одновременно оптимизирует программу со значительной продолжительностью, поскольку нам не нужно снова и снова ходить в каждый элемент для каждой операции.

import theano
from theano import tensor

# declare variables
x, y = tensor.dmatrices('x', 'y')

# create simple expression for each operation
diff = x - y

abs_diff = abs(diff)
diff_squared = diff**2

# convert the expression into callable object
f = theano.function([x, y], [diff, abs_diff, diff_squared])

# call the function and store the result in a variable
result= f([[1, 1], [1, 1]], [[0, 1], [2, 3]])

# format print for readability
print('Difference: ')
print(result[0])

print('Absolute Difference: ')
print(result[1])

print('Squared Difference: ')
print(result[2])

Когда мы запускаем эту программу, мы можем увидеть вывод как напечатанный несколько результатов:

Использование функции Theano Gradient

Давайте попробуем несколько полезных и сложных функций, поскольку мы движемся к минимальному примеру. Здесь мы постараемся выяснить производное выражения относительно параметра

Мы вычисляем градиент логистической функции, определенной выше, которая может быть нанесена как: давайте продемонстрируем работу для градиента с примером:

import numpy
import theano
from theano import tensor
from theano import pp

# declare variable
x = tensor.dmatrix('x')

#create a simple expression for logistic function
s = tensor.sum(1 / (1 + tensor.exp(-x)))

# create expression to compute gradient of s with respect to x
gs = tensor.grad(s, x)

# create callable object
dlogistic = theano.function([x], gs)

# call the function and print the results
print(dlogistic([[0, 1], [-1, -2]]))

Когда мы запускаем эту программу, мы можем увидеть вывод как: Таким образом, Theano можно использовать для эффективной символической дифференциации (поскольку выражение, возвращаемое Tensor.Grad, будет оптимизировано во время компиляции), даже для функции со многими входами.

Давайте вместе поставим вещи в простой пример тренировок, чтобы понять Theano лучше!

Минимальный пример тренинга Theano

Давайте попробуем что-нибудь тренируйте, используя Theano. Мы будем использовать градиентное происхождение для обучения веса в W, чтобы мы получили лучшие результаты от модели, чем существующие (0,9):

import theano
import numpy

# declare variables
x = theano.tensor.fvector('x')
target = theano.tensor.fscalar('target')
W = theano.shared(numpy.asarray([0.2, 0.7]), 'W')

# create expressions
y = (x * W).sum()
cost = theano.tensor.sqr(target - y)
gradients = theano.tensor.grad(cost, [W])

W_updated = W - (0.1 * gradients[0])
updates = [(W, W_updated)]

# create a callable object from expression
f = theano.function([x, target], y, updates=updates)

# call the function and print results
for i in range(10):
    result = f([1.0, 1.0], 20.0)
    print(result)

Когда мы запускаем эту программу, мы можем увидеть вывод как: вторая входная переменная «цель» будет действовать как целевое значение, которое мы используем для обучения:

target = theano.tensor.fscalar('target')

Нам нужна затратная функция для обучения модели, которая обычно в квадрате расстояние от целевого значения

cost = theano.tensor.sqr(target - y)

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

gradients = theano.tensor.grad(cost, [W])

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

Предполагая, что обучение.1:

W_updated = W - (0.1 * gradients[0])

Далее мы должны снова определить функцию Theano с парой изменений:

f = theano.function([x, target], y, updates=updates)

Когда функция вызывается, она принимает значения для x и цели и возвращает значение y в качестве вывода, и Theano выполняет все обновления в списке обновлений.

Теперь мы неоднократно называем функцию, чтобы тренировать, 10 раз в этом примере, чтобы быть конкретным. Как правило, данные обучения содержат разные значения, но для этого примера мы используем одни и те же значения x = [1.0, 1.0] и каждый раз, чтобы проверить вещи правильно.

На выходе выше обратите внимание, как целевое значение движется ближе к 20 (целевое значение) на каждом шаге.

Сводка Neural Network

В этом посте мы обнаружили библиотеку Theano Python для эффективных численных вычислений.

Мы узнали, что это библиотека фундамента, используемая для глубоко изучения исследований и разработок, и что ее можно использовать непосредственно для создания моделей глубокой обучения или удобными библиотеками, построенными на его вершине, такие как Lasagne и Keras.