No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
Digitz . Nov 15, 2017
Training . Nov 15, 2017
.gitignore . Nov 15, 2017
MNIST.sln . Nov 15, 2017
NuGet.config fix nuget Nov 15, 2017

MNIST for ML Beginners using C#

This sample is a very simple WPF application which recognizes hand-written digits using the pre-built MNIST convolutional model. The MNIST problem is Machine Learning's Hello World program.

MNIST is a simple computer vision dataset which consists of hand written digits like as shown below.


This tutorial comes with a pre-built CNTK model which is trained to look at these hand-written digits and predict what these digits are.

CNTK is a deep learning library in which this model is built in. For now, we will just basically load this model as a resource into your .NET application and evaluate on it. Follow the steps below to get going.

Get Started

Step 1: Download and Install

If you are new to .NET, go ahead and download Visual Studio 2017 and select only the '.NET desktop development' section as shown below.

workload install

Step 2: Download MNIST tutorial code

Clone or download this github repo. Open up the MNIST solution (MNIST.sln) file in Visual Studio 2017.                 workload install

Step 3: Understand Solution Structure

This solution consits of two projects 'Digitz' (C# project building a windows app using the CNTK pre-built MNIST model) and 'Training' (Python project, which generates the MNIST model using CNTK). Don't worry about the Python project for now.

 workload install  

Step 4: Configure and build your Project for Launch

Set the start-up project to be 'Digitz' project as shown below and then go ahead and build your application by using the right-click 'build' option.


Step 5: Launch MNIST application

Launch the app by clicking the green start button at the top or F5 on your keyboard. Draw out a hand-written digit and click 'Recognize' to see if this works for you!

app running

Congrats! you have just completed the helloworld program for Machine Learning.


The sample provides you an example of how you can use Machine Learning and AI in your .NET apps today. The sample basically loads the pre-built model 'digit.model' and takes the bitmap image that user draws out, converts that into an optimized multi-dimensional exchange type Tensor and then calls CNTK evaluate method to evaluate on the model.

The evaluate method from CNTK returns a list of floats (0 - 9) predicting the confidence for each of these digits. The highest confidence digit is then displayed in the app.

This sample also introduces Tensor, Tensor is an exchange type for homogenous multi-dimensional data for 1 to N dimensions. The motivation behind introducing Tensor is to make it easy for Machine Learning library vendors like CNTK, Tensorflow, Caffe, Scikit-Learn to port their libraries over to .NET with minimal dependencies in place.  Tensor is designed to provide the following characteristics.

To learn more about Tensor follow our blog post and GitHub repo.

To follow a video tutorial on this app being used you can also follow this video.