{"id":15598551,"url":"https://github.com/jofaval/mnist","last_synced_at":"2026-04-12T13:50:37.969Z","repository":{"id":125618348,"uuid":"502452441","full_name":"jofaval/mnist","owner":"jofaval","description":"Computer Vision with Neural Networks for handwritten digits recognition in 1998","archived":false,"fork":false,"pushed_at":"2022-06-30T13:42:41.000Z","size":1246,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-04T12:51:52.151Z","etag":null,"topics":["classification","computer-vision","data-science","deep-learning","deep-neural-networks","google-colab","keras","matplotlib","pyspark","python","pytorch","seaborn","spark","tensorflow"],"latest_commit_sha":null,"homepage":"https://colab.research.google.com/github/jofaval/mnist/blob/master/notebook.ipynb","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jofaval.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-11T20:44:17.000Z","updated_at":"2022-09-28T21:56:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"644dd2c7-465a-46ad-a1bd-bda6f95c7889","html_url":"https://github.com/jofaval/mnist","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"fad772a7ad236db1168def824e7b5c73b951247a"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jofaval%2Fmnist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jofaval%2Fmnist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jofaval%2Fmnist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jofaval%2Fmnist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jofaval","download_url":"https://codeload.github.com/jofaval/mnist/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246180923,"owners_count":20736460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classification","computer-vision","data-science","deep-learning","deep-neural-networks","google-colab","keras","matplotlib","pyspark","python","pytorch","seaborn","spark","tensorflow"],"created_at":"2024-10-03T01:40:33.191Z","updated_at":"2026-04-12T13:50:37.927Z","avatar_url":"https://github.com/jofaval.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MNIST #\n\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/jofaval/mnist/blob/master/notebook.ipynb)\n\n## Table of contents\n\n1. [📁 Data](#-data)\n1. [📓 Description](#-description)\n1. [✔️ Objectives](#-objectives)\n1. [🧱 Tech stack](#-tech-stack)\n1. [💹 Algorithms](#-algorithms)\n1. [📊 Visualization](#-visualization)\n1. [🤓 Conclusions](#-conclusions)\n1. [©️ Credits](#-credits)\n\n## 📁 Data\n[↑ Back to the table](#table-of-contents)\n\nThe data is available at the `sample_data` folder that is available with every Google Colab Notebook.\n\n## 📓 Description\n[↑ Back to the table](#table-of-contents)\n\nThis is a beginner notebook about sort of advanced topics, the hello world of computer vision, and a deep exploration into Data Science and Neural Networks, and it's architecture.\n\nMy previous project about [California Housing Pricing](https://colab.research.google.com/github/jofaval/california-housing-pricing) was more about Data Analysis and Data Science, in this project I've focused more on the Data Science, MNIST leaves almost no room to real exploratory data analysis, and we could do some analysis about the graphism of the digits and the hand writting, but it is completely out of my domain of knowledge.\n\nSo, what is there to expect from this project? A junior approach to computer vision with neural networks using PySpark, Tensorflow and PyTorch.\n\n## ✔️ Objectives\n[↑ Back to the table](#table-of-contents)\n\nIn no specific order whatsoever:\n\n- Put together the knowledge adquired in a more fashionable way.\n- Explore the data correctly in a way that makes sense.\n- Upload a starter project to my fill non-existent data science portfolio.\n- Define and explore ways to present the conclusions and the process.\n- Explore, learn and improve my knowledge on neural networks using simple example such as the MNIST Dataset.\n- Improving and polishing my skills as a junior data scientist and data analyst.\n\nThe one thing that, for sure, I had in mind before starting this project, is that I wanted to use PySpark, then, I wanted to also use Tensorflow and Keras, since I'm, at the moment being, more comfortable with them, and as the project went on, I encouraged myself to try PyTorch, a library I never picked on, and only seen, briefly, in my academic education.\n\n## 🧱 Tech stack\n[↑ Back to the table](#table-of-contents)\n\nPython, that's it! R is a programming language that, as for the moment being, I have no experience with, even though it's powerful and broadly used, but I'd dare to say that no more than Python.\n\nAnd one of the strongest points, if not the most, about Python, are it's libraries, so... the libraries I've used are:\n\n- Pandas, data manipulation with an ease of use and exploration data analysis.\n- Numpy, a really strong linear algebra library, used in the project for it's statistics utilities, SciPy may be an alternative, but I have no experience at all with it.\n- Matplotlib and Seaborn, both fantastic libraries for data visualization, and they complement each other.\n- PySpark, a powerful implementation of Spark, a parallelization framework based on Java and Scala and widely used for Big Data Architectures.\n- Tensorflow and Keras, the industry standard for Deep Learning.\n- PyTorch, an opensource Deep Learning library that's object oriented.\n\n## 💹 Algorithms\n[↑ Back to the table](#table-of-contents)\n\nNeural networks, my main objective for this project was to only use neural networks, I've used almost exactly the same architecture in different libraries, but only in Tensorflow have I implemented some sort of regularization, which should of been a must to be honest.\n\nMy idea while building the architecture, what I grasped was that, having that many inputs (more than 10), having hidden layers with not many inputs was leading to information loss and a really poor performance, so I tried to split the data processing between two hidden layers, not in PySpark, and having half of the inputs as neurons for the first hidden layer, then a fourth for the second hidden layer.\n\nRegularization is a must in this kind of projects, it helps avoiding overfitting so that a better performance can be achieved on never-seen data. It barely increased the performance, but it did!\n\n## 📊 Visualization\n[↑ Back to the table](#table-of-contents)\n\nFor this project, just a plot grid, and plotting the evolution of the neural networks, so... just plain lineplots and grids of images, which is exactly what was needed for this project, nothing fancier.\n\n## 🤓 Conclusions\n[↑ Back to the table](#table-of-contents)\n\nComputer Vision with Deep Learning are really powerful, just 20k images sufficed for a simple neural network to learn to identify handwritter digits, that's awesome!\n\nUnsupervised is the way to go in this project, no need to understand in a deep level how it is getting the results, it just does. Obviously is not magic, the information gets passed from layer to layer and it learns it's patterns. There are weights and biases for each layer.\n\nAnd, even though it's most likely overfitting, having no score below 95% is a really nice result, but with this project, the fitting started taking it's time, no more almost instantly fitting a model, just a couple of minutes, but still. I'm happy with what was achieved.\n\n## ©️ Credits\n[↑ Back to the table](#table-of-contents)\n\nAll of the credits for the datasets goes to Yann LeCun, Corinna Cortes and Christopher J.C. Burges. And to Google, but any more details at the official [MNIST's documentation](http://yann.lecun.com/exdb/mnist/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjofaval%2Fmnist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjofaval%2Fmnist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjofaval%2Fmnist/lists"}