Skip to content

Latest commit

 

History

History
115 lines (70 loc) · 5.91 KB

README.pt.md

File metadata and controls

115 lines (70 loc) · 5.91 KB

logo titulo

divisoria

subtitulo prt

Read this README in english

Um perceptron multicamadas (MLP) consiste em uma Rede Neural Artificial com pelo menos três camadas de nós: uma camada de entrada, uma camada escondida e uma camada de saída. Exceto pelos nós de entrada, cada nó é um neuron que usa uma função de ativação não linear. MLP utiliza uma técnica de aprendizado supervisionado chamado backpropagation para treinamento. Suas múltiplas camadas e ativação não-linear distingue a MLP de um perceptron linear. A rede pode distinguir dados que não são linearmente separáveis.

Nesse repositório há uma implementação paralela de uma MLP que reconhece caracteres independente da fonte em que foram escritos.

O Dataset

O dataset original consiste de imagens de 153 fontes de caracteres obtidas do UCI Machine Learning Repository. Algumas fontes foram escaneadas por vários dispositivos: scanners de mão, desktop scanners ou câmeras. Outras fontes foram geradas por computador.

Uso

Para usar o código, é necessário primeiramente clonar esse repositório.

git clone github.com/viniciusvviterbo/Multilayer-Perceptron
cd ./Multilayer-Perceptron

Formatando o dataset

Nesse projeto optamos por descrever as principais características na primeira linha, uma linha vazia - para facilidade de leitura, é inteiramente opcional -, e os dados em si. Exemplo:

[NÚMERO DE CASOS] [NÚMERO DE ENTRADAS] [NÚMERO DE SAÍDAS]

[ENTRADA 1] [ENTRADA 2] ... [ENTRADA N] [SAÍDA 1] [SAÍDA 2] ... [SAÍDA N]
[ENTRADA 1] [ENTRADA 2] ... [ENTRADA N] [SAÍDA 1] [SAÍDA 2] ... [SAÍDA N]
[ENTRADA 1] [ENTRADA 2] ... [ENTRADA N] [SAÍDA 1] [SAÍDA 2] ... [SAÍDA N]

Para testar o código, nesse repositório está incluso o dataset reduzido (sampleNormalizedFonts.in), e ele pode ser usado para melhor entender a formatação necessária.

Normalizando o dataset

Um dataset normalizado é preferível por seus resultados (quase) absolutos dados ao fim do treinamento: 0 ou 1. Para normalizar o dataset, execute:

g++ ./normalizeDataset.cpp -o ./normalizeDataset
./normalizeDataset.cpp < PATTERN_FILE > NORMALIZED_PATTERN_FILE

Exemplo:

g++ ./normalizeDataset.cpp -o ./normalizeDataset
./normalizeDataset.cpp < ./datasets/patternFonts.in > ./datasets/normalizedPatternFonts.in

Compilando o código fonte

Compile o código usando OpenMP

g++ mlp.cpp -o mlp -O3 -fopenmp -std=c++14

Treinamento e Resultado

Nesse código, nós dividimos o dataset informado pela metade. A primeira metade é usada apenas para treinamento, a segunda é usada para teste, desse modo a rede vê essa segunda parte como novo conteúdo e tenta obter o diagnóstico correto.

Executando

Para execução, o comando necessita alguns parâmetros:

.mlp TAMANHO_CAMADA_ESCONDIDA TAXA_DE_APRENDIZADO LIMIAR NÚMERO_DE_NÚCLEOS< ARQUIVO_DE_PADRÕES
  • TAMANHO_CAMADA_ESCONDIDA se refere ao número de neurônios na camada escondida da rede;
  • TAXA_DE_APRENDIZADO se refere à taxa de aprendizado da rede, um número de ponto flutuante usado durante a fase de correção do backpropagation;
  • LIMIAR se refere à maior taxa de erro aceita pela rede a fim de obter um resultado correto;
  • NÚMERO_DE_NÚCLEOS se refere ao número de núcleos da CPU que a rede pode utilizar;
  • ARQUIVO_DE_PADRÕES refers to the normalized pattern file

Exemplo:

./mlp 1024 0.1 1e-3 4 < ./datasets/normalizedPatternFonts.in

Como um meio mais prático de executar, incluímos nesse repositório um script shell para facilitar os testes e ver os resultados de múltiplas execuções para obter o tempo de execução médio.

./script.sh

O script compila o código como uma implementação sequencial e a executa 5 vezes, depois o compila novamente como uma implementação paralela e executa mais 5 vezes. Para isso, estamos usando o (já normalizado e formatado) dataset reduzido sampleNormalizedFonts.in.

Referências

Dua, D. and Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.

Análise do Desempenho de uma Implementação Paralela da Rede Neural Perceptron Multicamadas Utilizando Variável Compartilhada - por GÓES, Luís F. W. et al, PUC Minas

Introdução a Redes Neurais Multicamadas - por Prof. Fagner Christian Paes

O que é a Multilayer Perceptron - de ML4U

Fabrício Goés Youtube Channel - por Dr. Luis Goés

Eitas Tutoriais - por Espaço de Inovação Tecnológica Aplicada e Social - PUC Minas

Koliko - por Alex Frukta & Vladimir Tomin

divisoria

GNU AGPL v3.0