Download - 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
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
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)
Introdução às Redes Neurais com PHP
O Neurônio Orgânico
Introdução às Redes Neurais com PHP
Redes Neurais Biológicas
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
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.
Introdução às Redes Neurais com PHP
Redes Neurais Artificiais
• Neurônio Artificial
Introdução às Redes Neurais com PHP
Redes Neurais Artificiais
• Neurônio Artificial (várias entradas)
Introdução às Redes Neurais com PHP
Funções de Ativação
Introdução às Redes Neurais com PHP
Redes Neurais Artificiais
• Rede de uma camada
Introdução às Redes Neurais com PHP
Redes Neurais Artificiais• Rede de várias camadas
Introdução às Redes Neurais com PHP
Redes Neurais Artificiais• Rede de várias camadas
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; } }
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++; } }
Introdução às Redes Neurais com PHP
Redes Neurais com PHP
• Uso public function usar($entradas) { $this->setEntradas($entradas); $this->sinapse();
return $this->saida; }
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...
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:
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
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
Introdução às Redes Neurais com PHP
Agradecimentos
Introdução às Redes Neurais com PHP
Perguntas?
Otávio Calaça
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/