Handwritten Digit Classification with Neural Network

This project demonstrates a neural network model built using TensorFlow and Keras to classify handwritten digits from the MNIST dataset. The MNIST dataset is a popular dataset for testing and benchmarking machine learning algorithms and contains 70,000 grayscale images of handwritten digits (0 to 9) with a size of 28x28 pixels.

Table of Contents

  1. Introduction
  2. Features
  3. Installation
  4. Usage
  5. Examples
  6. Contributing
  7. License

Introduction

This project provides a practical example of using a Multilayer Perceptron (MLP) neural network for image classification. The neural network is trained to recognize and classify digits from the MNIST dataset. It covers the full workflow from data preprocessing to model training, evaluation, and visualization of results.

Features

  • Neural Network Model: A fully connected neural network with hidden layers and dropout regularization.
  • Data Preprocessing: Normalization of input data and conversion of labels to one-hot encoding.
  • Model Training: Training the model using the Adam optimizer and categorical cross-entropy loss function.
  • Model Evaluation: Evaluation of the model's performance on the test set.
  • Visualization: Plotting training/validation accuracy and loss, and visualizing predictions.

Installation

Prerequisites

Make sure you have the following installed:

  • Python 3.x
  • TensorFlow
  • Matplotlib

Install Required Packages

If you haven't installed TensorFlow and Matplotlib yet, you can do so using pip:

pip install tensorflow matplotlib

Usage

  1. Clone the Repository:

    Clone the repository to your local machine:

    git clone https://github.com/your-username/mnist-digit-classification.git
  2. Navigate to the Directory:

    Go to the project directory:

    cd mnist-digit-classification
  3. Run the Script:

    Run the script using Python:

    python mnist_digit_classification.py

Running the Program

When you run the script, it will:

  • Load the MNIST dataset.
  • Preprocess the data (normalize and one-hot encode).
  • Define a neural network model with hidden layers and dropout.
  • Train the model on the training set and validate it on a validation set.
  • Evaluate the model on the test set.
  • Plot the training and validation accuracy and loss over epochs.
  • Display a few test samples with predicted and true labels.

Examples

Output

The script will produce outputs similar to:

  1. Test Accuracy: The accuracy of the model on the test dataset, for example:

    Test Accuracy: 0.98
    
  2. Training and Validation Curves: Plots of accuracy and loss over the training epochs.

    Accuracy and Loss Plot

  3. Predicted Samples: Displays images of a few test samples with the model's predicted label and the true label.

    Predicted Samples

Predicting New Samples

To predict a new digit image, you can modify the X_test variable to load your custom image and pass it to the model for prediction.

Contributing

Contributions are welcome! If you have ideas for new features, improvements, or bug fixes, please feel free to open an issue or create a pull request.

Steps to Contribute

  1. Fork the Repository: Click the 'Fork' button at the top right of this page.
  2. Clone Your Fork: Clone your forked repository to your local machine.
    git clone https://github.com/your-username/mnist-digit-classification.git
  3. Create a Branch: Create a new branch for your feature or bug fix.
    git checkout -b feature/your-feature-name
  4. Make Changes: Make your changes and commit them with a descriptive message.
    git commit -m "Add: feature description"
  5. Push Changes: Push your changes to your forked repository.
    git push origin feature/your-feature-name
  6. Create a Pull Request: Go to the original repository on GitHub and create a pull request.

License

This project is licensed under the MIT License - see the LICENSE file for details.


Thank you for using the Handwritten Digit Classification with Neural Network! If you have any questions or feedback, feel free to reach out. Happy coding! 😊