mnist

July 17, 2014 ยท View on GitHub

Simple C++ reader for MNIST dataset

Usage

You have to include mnist_reader.hpp in your code:

.. code:: cpp

#include "mnist/mnist_reader.hpp"

And then, you can use the function :code: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:

.. code:: cpp

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 :code: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:

.. code:: cpp

#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:

  • :code:binarize_dataset(dataset) Binarize all the images in the data set
  • :code: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 <http://yann.lecun.com/exdb/mnist/>_.