IFT3395/6390

Les chiffres MNIST

Description du jeu de données

Il s'agit d'un jeu de données des chiffres manuscrites. Au total, le jeu contient 70000 exemples. Les premiers 60000 forment l'ensemble d'entraînement et les autres 10000 sont utilisés comme ensemble de test.

Sur la page officielle du MNIST vous trouverez des resultats obtenus par differents algorithmes sur ce jeu de donnés. A date, le meilleur résultats est de 0.39% (erreur de classification) sur l'ensemble de test, ce qui correspond a 39 erreurs sur 10000! On ne vous demande pas d'ameliorer ce résultat, mais si vous le réussissez, vous devriez nous contacter :)

Chargement et visualisation

Vous pouvez télécharger le jeu ici (187M), ou ici (12M, compressé). Chaque ligne de ce fichier contient 785 nombres. Les premiers 784 correspondent aux valeurs des pixels de l'image du chiffre (un chiffre est représenté par une image en niveaux de gris, de taille de 28 x 28). Le dernier nombre est la classe, de 0 a 9 (representant les chiffres de 0 a 9). Vous pouvez chargez les donnees en Python en utilisant mnist = numpy.loadtxt('mnist.txt', dtype='float32'). Le chargement peut prendre une minute ou plus sur un machine lente et ca prend beaucoup de memoire (2GB). Vous pouvez aussi lire les donnees ligne par ligne.

La variable mnist sera un array de 70000 x 785 (donc chaque rangée contient de l'information sur un exemple de chiffre). Vous pouvez visualiser la chiffre correspondant à une rangée en interpretant les premiers 28 elements de la rangée comme la premiere ligne de pixels dans l'image, les 28 elements suivants comme la deuxieme ligne etc. En Python vous pouvez utiliser la fonction imshow() de la librairie pylab pour visualiser les images de 28x28.

Normalisation, validation et test

Vous devez vérifier si les données sont normalisées. S'il faut les normaliser ou standardiser, expliquez dans votre rapport la raison et la procedure suivie. Sinon, expliquer la raison aussi.

Pour la partie du devoir 3 où l'on vous demande de tracer des courbes d'appentissage, divisez votre jeu de données en 3 parties: les premiers 50000 exemples seront l'ensemble d'entraînement, les 10000 suivants seront votre ensemble de validation et les derniers 10000 l'ensemble de test. Avec 50000 exemples et un réseau de neurones il devrait être facile d'arriver a environ 5%. Un résultat de 2% (ce qui est faisable avec un réseau de neurones simple ayant 800 neurones cachés et entraîné avec l'entropie croisée comme coût) vous donnera des points boni.

Svp, n'optimisez pas vos hyperparamètres sur l'ensemble de test, mais bien sur l'ensemble de validation!!

Questions?

N'hésitez pas à nous contacter si vous avez des questions!