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.
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!!