Convolutional Neural Network Workbench by Filip D’haene (from http://www.codeproject.com/Articles/140631/Convolutional-Neural-Network-MNIST-Workbench)

Following are my notes on a great Neural Network project written in C# that is widely used as a benchmarking and learning reference.

Keywords

Convolutional Neural Network – is a neural network that uses only local connections and shared weights.

MNIST dataset of handwritten digits – The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image. It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting.

CIFAR-10 dataset of 10 different natural objects – 

Background

Article by Mike O’Neill on the The Code Project

Dr. Yann LeCun’s paper: Gradient-Based Learning Applied to Document Recognition

An award winning project by another developer

Key Programming Mechanisms

Create a new Neural Network – NeuralNetworks network = new NeuralNetworks

Create a new layer – network.Layers.Add(new Layers(..

Assign initial (random) weights – network.InitWeights(..

Using lists (as opposed to arrays) to manage items – List<bool> listname = new List<bool>(row * column)

{ member00, member01, .member02,..
member10, member11, member1,3,..
};

Compare lists to other types of Collections

Persistence

DataProvider class – for loading MNIST and CIFAR-10 data

NeuralNetworkDataSet – for loading and saving Neural Network definitions (with weights) to disk files

Architecture

This application is developed using the Model, View, View-Model pattern (MVVM) as applied to a Windows Presentation Foundation project.

Moving Forward

The developer of this project expressed his hopes that..

“..there’s someone out there who can actually use this code and improve on it. Extend it with an unsupervised learning stage for example (encoder/decoder construction), or implement a better loss-function (negative log likelihood instead of MSE); extend to more test databases; make use of more advanced squashing functions, etc.”