mes-scripts-de-ml/03-vision/01-digit-prepa_data.py

76 lines
2.8 KiB
Python

import os, time, random
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
###############################################################################
# 01-digit-prepa_data.py
# @title: Vision par ordinateur - Reconnaissance de digit - Analyse et préparation des données
# @project: Mes scripts de ML
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
# @copyright: Copyright (C) 2023 Philippe Roy
# @license: GNU GPL
###############################################################################
###
# Commandes NumPy :
# - np.array : créer un tableau à partir d'une liste de listes
# - np.c_ : concatène les colonnes des tableaux
# - np.linspace : créer un tableau 1D de la valeur de début à la valeur de fin avec n valeurs
# - np.meshgrid : créer un tableau 2D avec l'ensemble des combinaisons allant des deux valeurs de début aux deux valeurs de fin
# - .reshape : reformater la tableau avec le nombre de lignes et le nombre de colonnes
###
###############################################################################
# Initialisation
###############################################################################
# Init du temps
t_debut = time.time()
# Init des plots
fig = plt.figure(layout="constrained", figsize=(20, 7))
fig.suptitle(" Vision par ordinateur - Reconnaissance de digit - Analyse et préparation des données")
img_ax = fig.subplots(10, 40)
###############################################################################
# Observations
###############################################################################
# Observations d'apprentissage, de validation et de test
chiffre = keras.datasets.mnist # Jeu de données MNIST (digit)
# train_filter = np.unique(Y_train, return_index=True)
# X_train, Y_train = X_train[train_filter[1:]], Y_train[train_filter[1:]]
(X, y), (X_test, y_test) = chiffre.load_data()
X_train, y_train = X[5000:]/255.0 , y[5000:]
X_valid, y_valid = X[:5000]/255.0 , y[:5000]
classes = [0,1,2,3,4,5,6,7,8,9]
###############################################################################
# Affichage des images avec l'étiquette
###############################################################################
print ("\n")
print ("Recherche de 400 images sur le jeu de test (10 000 images).")
# X_new_unique = np.unique(X_test, axis=0, return_index=True)
for ligne in range (10): # Ligne
i_first=-1
for colonne in range (40): # Colonne
for i in range (i_first+1, X_test.shape[0]):
if y_test[i] == ligne:
# if y_test[i] == 2:
img_ax[ligne][colonne].imshow(X_test[i], cmap="binary", interpolation="nearest")
img_ax[ligne][colonne].set_axis_off()
img_ax[ligne][colonne].set_title(str(i), fontsize=10)
i_first=i
break
print ("\n")
plt.show()