Skip to content

yesfedor/mini-tf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini-TF: Deep Learning Engine from Scratch (C++)

Проект по реализации легковесного фреймворка глубокого обучения на чистом C++ с целью изучения архитектуры тензорных вычислений и автоматического дифференцирования.

🎯 Цели проекта

  • Реализация собственного контейнера Tensor (управление памятью, страйды).
  • Создание движка автоматического дифференцирования (динамический вычислительный граф).
  • Написание базовых слоев нейросети и оптимизаторов (SGD, Adam).
  • Zero-Dependency: Минимум внешних библиотек (только STL и, возможно, тесты).

🏗 Архитектура модулей

1. Core (Математическое ядро)

  • tensor.hpp/cpp: Многомерные массивы. Поддержка shape, stride и эффективного доступа к данным.
  • ops_cpu.hpp/cpp: Реализация CPU-кернелов. Матричное умножение (MatMul) с оптимизацией кэша.
  • memory.hpp/cpp: Управление выравниванием памяти (aligned memory) для будущего внедрения SIMD.

2. Autograd (Движок градиентов)

  • node.hpp: Базовая единица графа. Хранит данные (Value) и градиент (Grad).
  • engine.hpp: Реализация алгоритма обратного распространения ошибки (Backpropagation) через топологическую сортировку.

3. NN & Optim (Высокоуровневое API)

  • layers.hpp: Абстракции слоев. Инициализация весов (Xavier/He).
  • loss.hpp: Функции стоимости (MSE, Cross-Entropy).
  • optimizer.hpp: Логика обновления параметров.

🚀 Дорожная карта (Roadmap)

  1. Phase 1 (Basic Math): Реализовать Tensor и базовое умножение матриц.
  2. Phase 2 (Scalar Autograd): Создать движок градиентов для скалярных величин (по аналогии с micrograd).
  3. Phase 3 (Tensor Autograd): Расширить движок на матричные операции.
  4. Phase 4 (Neural Network): Реализовать слои Dense и ReLU.
  5. Phase 5 (Application): Обучить модель на наборе данных MNIST (в examples/mnist_train.cpp).

🛠 Сборка

Для сборки требуется CMake версии 3.10+ и компилятор с поддержкой C++17.

mkdir build && cd build
cmake ..
make
./mini_tf_run

OR

cmake --build build --target mnist_train

🧪 Тестирование

Каждый модуль сопровождается unit-тестами для проверки корректности матана.

  • Проверка MatMul на соответствие эталонным значениям.
  • Проверка градиентов (Gradient Checking) — сравнение аналитического градиента с численным.

Как пользоваться (Пример концепции)

#include "mini_tf.hpp"

// Создание графа
auto x = mtf::Variable({2, 2}, true); // true = нужен градиент
auto w = mtf::Variable({2, 2}, true);
auto b = mtf::Variable({2, 1}, true);

auto y = mtf::matmul(w, x) + b;
y.backward(); // Автоматический расчет градиентов для x, w, b

About

AI implement on C++

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors