Este repositório contém uma implementação completa de uma Rede Neural Convolucional (CNN) a partir do zero, utilizando C++ moderno (C++20) e CMake. O projeto foi desenvolvido para fins de estudo, focando em uma arquitetura modular e na corretude dos algoritmos de forward e backward propagation.
- Implementação Pura em C++: Nenhuma biblioteca de Deep Learning externa foi utilizada.
- Arquitetura Modular: O código é organizado com uma classe base
Layer
e implementações de camadas essenciais:Conv2D
(Convolução 2D)Dense
(Totalmente Conectada)ReLU
(Ativação)Softmax
(Ativação para classificação)Flatten
(Achatamento de tensor)
- Testes Unitários: Inclui um módulo de teste unitário (
RMTAtesteunitario
) que valida cada componente da rede, utilizando verificação de gradiente numérico para garantir a corretude do backpropagation. - Sistema de Build com CMake: Utiliza CMake para facilitar a compilação em diferentes ambientes.
- CMake: Versão 3.1 ou superior.
- Compilador C++: Um compilador com suporte a C++20 (ex: GCC 10+, Clang 12+).
git clone https://github.com/raphaelmta/DeepLearnig-CPP.git
cd DeepLearning-CPP
O modelo foi treinado e testado com o dataset MNIST.
- Crie uma pasta chamada
dados
na raiz do projeto. - Baixe os 4 arquivos do dataset a partir do site oficial do MNIST e coloque-os dentro da pasta
dados
:train-images-idx3-ubyte
train-labels-idx1-ubyte
t10k-images-idx3-ubyte
t10k-labels-idx1-ubyte
mkdir build
cd build
cmake ..
make
Os executáveis estarão dentro da pasta build
.
- Para rodar os testes unitários (recomendado):
./RMTAtesteunitario
- Para iniciar o treinamento da rede:
./RMTAtreino ../dados/train-images-idx3-ubyte \
../dados/train-labels-idx1-ubyte \
../dados/t10k-images-idx3-ubyte \
../dados/t10k-labels-idx1-ubyte
.
├── CMakeLists.txt # Script de build
├── RMTAdataset.hpp # Módulo de carregamento do dataset
├── RMTAmodelo.hpp # Definição do Tensor e das camadas da rede
├── RMTAtreino.cpp # Lógica de treinamento e avaliação do modelo
├── RMTAtesteunitario.cpp # Testes unitários para garantir a corretude
├── dados/ # Pasta para os arquivos do dataset (a ser criada)
└── build/ # Pasta para os arquivos de compilação (a ser criada)