Theano - Alto Desempenho em Machine Learning

Post on 07-Aug-2015

103 views 3 download

Transcript of Theano - Alto Desempenho em Machine Learning

TheanoAlto desempenho em Machine Learning

Felipe Martins11 de Abril de 2015

Quem?Universidade Federal do Ceará- Bacharelado em Computação;

LSBD- Líder técnico em projetos usando C e C++;

Quem?Universidade Federal do Ceará- Bacharelado em Computação;

LSBD- Líder técnico em projetos usando C e C++;

Por aí...@ffmmjj_martinshttps://github.com/ffmmjj

Roteiro● Contexto;● O que é a Theano;● Exemplo;

ContextoPython e Computação Científica

ContextoPython e Computação Científica

Contexto

Mas Python não é uma linguagem “lenta”!?!

ContextoDepende :-)

ContextoDepende :-)

ContextoDepende :-)

PyCUDA

ContextoMachine Learning

ContextoMachine Learning

ContextoMachine Learning

Não suporta execução em GPUs :(

O que é TheanoBiblioteca de computação simbólica para Machine Learning;

Otimiza expressões matemáticas e compila-as para código nativo;

Permite execução em GPUs!

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

import theanoimport theano.tensor as T

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

import theanoimport theano.tensor as TX = T.dmatrix('X')Y = T.dmatrix('Y')

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

import theanoimport theano.tensor as TX = T.dmatrix('X')Y = T.dmatrix('Y')Z = X*Y

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

import theanoimport theano.tensor as TX = T.dmatrix('X')Y = T.dmatrix('Y')Z = X*Yf = theano.function([X, Y], Z)

O que é TheanoExemplo: multiplicar duas matrizes 1000 x 1000;

import theano x = [[1, 2], [3, 4]]import theano.tensor as T y = [[5, 6], [7, 8]]X = T.dmatrix('X') z = f(x, y)Y = T.dmatrix('Y')Z = X*Yf = theano.function([X, Y], Z)

O que é TheanoExistem 3 maneiras de ajustar as configurações da Theano(na seguinte ordem de precedência):

Módulo theano.configArquivo .theanorcVariável de ambiente THEANO_FLAGS

O que é Theanotheano.config

import theanotheano.config.floatx = ‘float32’theano.config.device = ‘gpu0’theano.config.nvcc.fastmath = ‘True’

O que é Theano~/.theanorc

O que é TheanoTHEANO_FLAGS

THEANO_FLAGS='floatX=float32,device=gpu0,nvcc.fastmath=True'export THEANO_FLAGS python <myscript>.py

O que é TheanoGradientes...

O que é TheanoGradientes…

x = T.dscalar(‘x’)

y = x ** 2

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

O que é TheanoGradientes…

x = T.dscalar(‘x’)

y = x ** 2

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

Dy = T.grad(y, x)

O que é TheanoGradientes…

x = T.dscalar(‘x’)

y = x ** 2

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

Dy = T.grad(y, x)

Df = theano.function([x], dy)

Exemplo

ExemploMachine Learning em 5 minutos :)

ExemploMachine Learning em 5 minutos :)

Modelo: Representação dos dados reais;

ExemploMachine Learning em 5 minutos :)

Modelo: Representação dos dados reais;

Custo: O quanto o modelo se aproxima dos dados reais;

ExemploMachine Learning em 5 minutos :)

Modelo: Representação dos dados reais;

Custo: O quanto o modelo se aproxima dos dados reais;

Treinamento: Como minimizar o custo;

ExemploModelo

R$

Exemplo

R$

Modelo

ExemploModelo

R$

ExemploCusto

R$

ExemploCusto

R$

ExemploCusto

R$

Média aritmética dos erros

ExemploCusto

R$

Média aritmética dos erros

ExemploTreinamento

R$

ExemploTreinamento

R$

ExemploTreinamento

R$

ExemploTreinamento

R$

Exemplo

R$

Treinamento

Exemplo

R$

Treinamento

Como?!?

Exemplo

R$

Treinamento

Como?!?

Exemplo

R$

Treinamento

Como?!?

Modificando parâmetros...

ExemploTreinamento

ExemploTreinamento

ExemploTreinamento

Custo

ExemploTreinamento

Custo

ExemploTreinamento

Custo

ExemploTreinamento

Custo

ExemploTreinamento

Custo

ExemploTreinamento

Custo

ExemploTreinamento

Custo

:(

ExemploDe volta ao Python!

ExemploDe volta ao Python!

alpha = T.dvector('a') a = 0.5

x = T.dvector('x') for i in

range(50):

t = T.dvector('t')

a = a - 0.0001 * Dj(a, X, T)

y = x * alpha

custo = T.sum((y - t)**2)

custo_derivada = theano.grad(custo, alpha)

J = theano.function([alpha, x, t], custo) / T.size(t)[0]

Dj = theano.function([alpha, x, t], custo_derivada)

Exemplo “real”Rede neural para classificar dígitos manuscritos

Exemplo “real”Rede neural para classificar dígitos manuscritos

Exemplo “real”Rede neural para classificar dígitos manuscritos

ExemploRede neural para classificar dígitos manuscritos

FIM!