C++ tutorial
Fashion-MNIST classification
The current implicit-autograd classifier over the complete Fashion-MNIST training and held-out test splits.
OaMatrixImplicit autogradCheckpoint manager
| Contract | Value |
|---|---|
| Dataset | 60,000 train and 10,000 held-out test images |
| Model | 784 → Linear(128, ReLU) → Linear(10) |
| Training | 5 epochs, batch 64, AdamW lr=0.001 |
| Pass criteria | Loss decreases; test accuracy >70%; checkpoint accuracy within 0.5 points |
Model
Tutorialmnistclassifierag.cpp
class OaMnistClassifier : public OaModule {public:OaMnistClassifier() {Fc1_ = OaMakeSharedPtr<OaLinear>(784, 128);Fc1_->SetActivation(OaActivation::Relu);Fc2_ = OaMakeSharedPtr<OaLinear>(128, 10);RegisterModule("fc1", Fc1_);RegisterModule("fc2", Fc2_);}OaMatrix Forward(const OaMatrix& input) override {auto normalized = OaFnMatrix::Scale(input, 1.0F / 255.0F);return Fc2_->Forward(Fc1_->Forward(normalized));}};
Training
The batch ring is sized from MaxAsyncSubmissions(), allowing GPU work to overlap CPU sampling while preserving matrix lifetimes.
Tutorialmnistclassifierag.cpp
while (not training.Loop.IsDone()) {OaMatrix& batchX = xRing[(training.Loop.Index() - 1) % xRing.Size()];OaMatrix& batchY = yRing[(training.Loop.Index() - 1) % yRing.Size()];if (not trainLoader.NextBatch(batchX, batchY)) {trainLoader.Reset();trainLoader.NextBatch(batchX, batchY);}optimizer->ZeroGrad();OaGradientTape tape;auto logits = model->Forward(batchX);auto loss = OaFnLoss::CrossEntropy(logits, batchY);tape.Backward(loss);training.Loop.Next(loss);}training.Loop.Finish();
Real held-out evaluation
Accuracy is computed over all 10,000 test images, not the final training minibatch.
Capability-aware precision
Weight initialization follows the active OA weight dtype; execution remains selected by device capability.
Measured training loop
OaItTraining owns progress, wall/GPU timing, optimizer completion, and summary metrics.
Artifact verification
OaCheckpointManager saves model and AdamW state, reloads the best checkpoint, and re-runs evaluation.
Build and run
Terminal
cmake --build Build/Release --target TutorialMnistClassifierAg -jOA_MNIST_DATA=/path/to/FashionMNIST/raw ./Bin/Release/Tutorial/Ml/TutorialMnistClassifierAg