Skip to content

wichtounet/mnist

Repository files navigation

mnist

Simple C++ reader for MNIST dataset

Usage

You have to include mnist_reader.hpp in your code:

#include "mnist/mnist_reader.hpp"

And then, you can use the function read_dataset() that returns a struct with a vector of training images, one of test images, one of training labels and one of test labels:

auto dataset = mnist::read_dataset<std::vector, std::vector, uint8_t, uint8_t>();

The first two template arguments defines which container will be used for the collections. The third argument is the type that is used to store a pixel (value between 0 and 255) and the last one is the type that is used to store a label (value between 0 and 9). The types in the example are the types by default, you can use any STL container for the containers and any type that is castable from unsigned char for the second.

Windows

The mnist_reader.hpp include is known not to compile on Visual Studio and Intel Compiler. You can use mnist_reader_less.hpp to overcome this:

#include "mnist/mnist_reader_less.hpp"

This is almost equivalent to mnist_reader.hpp, except that the containers are forced to be vector.

Utilities

The header mnist_utils.hpp contains two utilities that can be useful when using MNIST in machine learning activities:

  • binarize_dataset(dataset) Binarize all the images in the data set
  • normalize_dataset(dataset) Normalize all the images in the data set to a zero mean and unit variance.

License

The header files are distributed under the terms of the MIT License. The MNIST files are not my property. If used in a paper, you'll need to cite the reference paper, as indicated in the official website.