introdução às redes neurais com php

23
Introdução às Redes Neurais com PHP Otávio Calaça – [email protected] http://phpendo.blogspot.com 1º /dev/net http://www.aslgo.org.br/dev/net/ Goiânia, 08 de Novembro de 2008

Upload: otavio-calaca-xavier

Post on 18-May-2015

2.783 views

Category:

Technology


1 download

DESCRIPTION

Apresentação sobre redes neurais e como usar esse conceito com PHP, através da biblioteca FANN.

TRANSCRIPT

Page 1: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Otávio Calaça – [email protected]

http://phpendo.blogspot.com

1º /dev/net

http://www.aslgo.org.br/dev/net/

Goiânia, 08 de Novembro de 2008

Page 2: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Grupo de Desenvolvedores PHP de Goiás

● Lista de Discussão

● Troca de Conhecimentos

● Encontros

● Palestras

● Eventos

● Networking

Page 3: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Roteiro

• Redes Neurais Biológicas– O Neurônio Orgânico

• Redes Neurais Artificiais– Histórico

– Perceptron

– Entradas, pesos, limiar e saídas

– Função de ativação• Redes Neurais e o PHP

– Construindo um perceptron

– FANN (Fast Artificial Neural Network)

Page 4: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

O Neurônio Orgânico

Page 5: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Biológicas

Page 6: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Cérebro X Computador

Possibilidades em um elemento Várias 2

Parâmetro Cérebro Computador

Material Orgânico Metal e plástico

Velocidade Milisegundos Nanosegundos

Tipo de Processamento Paralelo Seqüencial

Armazenamento Adaptativo Estático

Controle de Processos Distribuído Centralizado

Page 7: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais

• Histórico– McCulloch e Pitts(1943).– Donald Hebb(1949): lei de aprendizagem.– Rosenblatt(1958): 1º neuro computador.– 2 decadas silenciosas.– Hopfield(1982): difusão dos conhecimentos.

Page 8: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais

• Neurônio Artificial

Page 9: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais

• Neurônio Artificial (várias entradas)

Page 10: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Funções de Ativação

Page 11: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais

• Rede de uma camada

Page 12: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais• Rede de várias camadas

Page 13: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais Artificiais• Rede de várias camadas

Page 14: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais com PHP• Sinapse e função de ativação

public function sinapse() { $this->saida = 0; foreach($this->entradas as $k => $ent) { $this->saida += $ent*$this->pesos[$k]; } $this->saida += $this->limiar; $this->saida = $this->ativacao($this->saida);

} public function ativacao($valor) { if($valor <= 0) { return 0; } else { return 1; } }

Page 15: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais com PHP• Aprendizado

public function treinar() { $this->sinapse(); $this->erro = $this->esperada - $this->saida; if($this->erro != 0) { $pesos = array(); foreach($this->entradas as $k => $ent) { $pesos[$k] = $this->pesos[$k] + $ent*$this->erro; } $this->limiar = $this->limiar + $this->erro; $this->setPesos($pesos); } } public function aprender() { $this->treinar(); $n = 0; while($this->erro and $n < 10) { $this->treinar(); $n++; } }

Page 16: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Redes Neurais com PHP

• Uso public function usar($entradas) { $this->setEntradas($entradas); $this->sinapse();

return $this->saida; }

Page 17: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

FANN (Fast Artificial Neural Network)

• Biblioteca desenvolvida em C;• Software Livre;• Possui vínculos para diversas linguagens:

– PHP– Java– C++– .NET– Python

– Ruby– Delphi– PERL– Outras...

Page 18: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

FANN no PHP

fann_createfann_trainfann_savefann_runfann_randomize_weightsfann_init_weightsfann_get_MSEfann_get_num_inputfann_get_num_outputfann_get_total_neuronsfann_get_total_connectionsfann_get_learning_rate

fann_get_activation_function_hiddenfann_get_activation_function_outputfann_get_activation_steepness_hiddenfann_get_activation_steepness_outputfann_set_learning_ratefann_set_activation_function_hiddenfann_set_activation_function_outputfann_set_activation_steepness_hiddenfann_set_activation_steepness_output

• Extensão disponível no PECL;• Funções disponiveis para o PHP:

Page 19: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

FANN no PHP$ann = fann_create(array(2, 4, 3), 1.0, 0.7);fann_train($ann, array( array( array(0,0), /* Input(s) */ array(0,0,0) /* Output(s) */ ), array( array(0,1), /* Input(s) */ array(1,1,0) /* Output(s) */ ), array( array(1,0), /* Input(s) */ array(1,1,0) /* Output(s) */ ), array(array(1,1), /* Input(s) */ array(0,1,1) /* Output(s) */ ) ), 100000, 0.0000001, 1000);

Exemplo

Page 20: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

FANN no PHPprint_r(fann_run($ann, array(0, 0)));print_r(fann_run($ann, array(0, 1)));print_r(fann_run($ann, array(1, 0)));print_r(fann_run($ann, array(1, 1)));

Retorno:

Exemplo

Array( [0] => 0 [1] => 0 [2] => 0)

Array( [0] => 1 [1] => 1 [2] => 0)

Array( [0] => 1 [1] => 1 [2] => 0)

Array( [0] => 0 [1] => 1 [2] => 1)

[0] => XOR[1] => OR[2] => AND

Page 21: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Agradecimentos

Page 22: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Perguntas?

Otávio Calaça

[email protected]

Page 23: Introdução às Redes Neurais com PHP

Introdução às Redes Neurais com PHP

Referências• FANN

http://leenissen.dk/fann/

• PECL fann

http://pecl.php.net/package/fann

• PHP: Hypertext Preprocessor

http://www.php.net

• Martin Hagan

http://hagan.ecen.ceat.okstate.edu/nnd.html

• Uma introdução às redes neurais

http://www.din.uem.br/ia/neurais/