/Perceptron

Simple Perceptron in PHP mainly for MNIST problem

Primary LanguagePHPGNU General Public License v3.0GPL-3.0

Perceptron

Implementação simples de perceptrons para o problema de reconhecimento de números MNIST[1] [2]. Este projeto baseia-se em implementações voltadas para PHP como o do desenvolvedor jtet[3] com a adição de uma interface de uso por linha de comando (exemplos a seguir). Utiliza especificação de treinamento implementadas em C por Matt Lind[4].

Para instalação:

composer install

Não é necessário usar a interface em linha de comando (run.php) pode reutilizar a classe Perceptron como desejar em seu programa.

require_once __DIR__ . '/vendor/autoload.php';

use Neural\Perceptron;

$perceptron = new Perceptron($quantidadeEntradas);
$perceptron->train($conjuntoEntradas, $alvo);
$teste = $perceptron->test($entradasParaTeste);

Existem funções para importação de dados de CSV e exportação de pesos em arquivo JSON para posterior uso em testes.

Usando a interface em linha de comando

Testado somente em ambiente Linux.

asciicast

Treinamento

Gera pesos randômicos para todos os neurônios (valores até um máximo de 0.4999...)
Para cada neurônio criado (10 Perceptrons)    
    erro = alvo - saída do neurônio
    Para todos os pesos i
        peso[i] += taxa_aprendizado * erro * entrada[i]
    Se (erro != desejado) somaErros++

Testes

##Cenário 1 Teste realizado após treinamento com 15 épocas/eras e 18 mil imagens (30 minutos), não utiliza bias nem função de ativação:

Pre-Testes

Testes

##Cenário 2 Teste realizado após treinamento com 15 épocas/eras e 60 mil imagens (103 minutos), com bias e usa função de ativação sigmoide:

Pre-Testes

Testes

##Cenário 3 Teste realizado após treinamento com 15 épocas/eras e 60 mil imagens (118 minutos), com bias, usa função de ativação sigmoide mas normaliza as entradas de dados dividindo o pixel por 255:

Pre-Testes

Testes

Referências:

  1. https://en.wikipedia.org/wiki/MNIST_database
  2. http://yann.lecun.com/exdb/mnist/
  3. https://github.com/jtet/Perceptron
  4. https://github.com/mmlind/mnist-1lnn/