C++ tutorial

Fashion-MNIST classification

The current implicit-autograd classifier over the complete Fashion-MNIST training and held-out test splits.

OaMatrixImplicit autogradCheckpoint manager
ContractValue
Dataset60,000 train and 10,000 held-out test images
Model784 → Linear(128, ReLU) → Linear(10)
Training5 epochs, batch 64, AdamW lr=0.001
Pass criteriaLoss 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 -j
OA_MNIST_DATA=/path/to/FashionMNIST/raw ./Bin/Release/Tutorial/Ml/TutorialMnistClassifierAg

View current source