An implementation of Andrew Ng's Sparse Auto-encoder assignment initially programmed in MATLAB and then optimized for speed in C, C++, and CUDA.