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.
Testado somente em ambiente Linux.
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++
##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:
##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:
##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: