Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.
/ GoMLP Public archive

Duas implementações de um Perceptron Multicamadas (MLP) para a solução do problema XOR. Uma feita do zero usando Go (+ gonum) e outra usando Python (+ pytorch)

License

Notifications You must be signed in to change notification settings

GustavoWidman/GoMLP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoMLP

Descrição

Essa atividade tinha como objectivo o desenvolvimento de um Perceptron Multicamadas (MLP) para a solução do problema XOR. Nesse repositório, você encontrará duas implementações do MLP, uma usando Go (e a lib gonum) e outra usando Python (e a lib pytorch). A Implementação em Go foi feita do zero, sem o uso de bibliotecas de terceiros, enquanto a implementação em Python foi feita usando a biblioteca pytorch para facilitar a implementação do modelo, usando SGD como otimizador e BCELoss como função de perda.

Estrutura

.
├── go
│   ├── go.mod
│   ├── go.sum
│   └── src
│       ├── main.go
│       ├── math
│       │   └── math.go
│       ├── perceptron
│       │   └── main.go
│       └── utils
│           ├── text.go
│           └── time.go
├── python
│   ├── requirements.txt
│   └── src
│       ├── main.py
│       ├── perceptron
│       │   └── main.py
│       └── utils
│           ├── math.py
│           └── text.py
└── README.md

A estrutura do repositório é bem simples. Dentro da pasta go você encontrará o código em Go e dentro da pasta python você encontrará o código em Python. Dentro de cada uma dessas pastas, você encontrará um arquivo main.go ou main.py que é o arquivo principal do projeto. Dentro da pasta perceptron você encontrará o código do Perceptron Multicamadas (orientado a objetos) e dentro da pasta utils você encontrará funções utilitárias e, no caso do Go, também existe uma pasta math com funções matemáticas (para compensar a falta de funções matemáticas que existem no numpy do Python).

Execução

Go

Para executar o código em Go, você deve ter o Go instalado na sua máquina. Para instalar o Go, siga as instruções aqui. Após instalar o Go, você deve executar o seguinte comando:

go run src/main.go

Você também pode compilar o código e executar o binário gerado:

go mod tidy # Para garantir que todas as dependências estão instaladas
go build -o go-mlp -ldflags "-s -w" src/main.go # Para compilar o código
./go-mlp # Executar o programa compilado

A seguir você encontrará a demonstração do código em Go.

GoMLP-GoDemo

Python

Para executar o código em Python, você deve ter o Python instalado na sua máquina. Para instalar o Python, siga as instruções aqui. Após instalar o Python, você deve executar o seguinte comando:

Crie um ambiente virtual:

python3 -m venv venv
source venv/bin/activate

Instale as dependências:

pip install -r requirements.txt

Execute o código:

python src/main.py

A seguir você encontrará a demonstração do código em Python.

GoMLP-PyDemo

Resultados

Em Python, o MLP foi treinado em 50 mil épocas e com uma taxa de aprendizado de 0.10, obtendo uma acurácia de 99.88% (sem arredondamento). Em Go, o MLP foi treinado em 500 mil épocas e com uma taxa de aprendizado de 0.10, obtendo uma acurácia média de 99.35% (sem arredondamento). Com arredondamento, a acurácia de ambos os modelos foi de 100%, o que significa que o modelo foi capaz de simular a função XOR (não aprender, ja que computadores não aprendem). Vale notar que a velocidade de execução do código em Go é muito superior ao código em Python, rodando 10 vezes mais épocas 10 vezes mais rápido (aproximadamente 100 vezes mais rápido).

About

Duas implementações de um Perceptron Multicamadas (MLP) para a solução do problema XOR. Uma feita do zero usando Go (+ gonum) e outra usando Python (+ pytorch)

Resources

License

Stars

Watchers

Forks