2023-07-03 12:17:16 +02:00
|
|
|
import os, time, random
|
|
|
|
import numpy as np
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
import tensorflow as tf
|
|
|
|
from tensorflow import keras
|
|
|
|
|
|
|
|
###############################################################################
|
2023-07-03 12:27:26 +02:00
|
|
|
# 01-digit-prepa_data.py
|
|
|
|
# @title: Vision par ordinateur - Reconnaissance de digit - Analyse et préparation des données
|
2023-07-03 12:17:16 +02:00
|
|
|
# @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))
|
2023-07-03 12:27:26 +02:00
|
|
|
fig.suptitle(" Vision par ordinateur - Reconnaissance de digit - Analyse et préparation des données")
|
2023-07-03 16:52:07 +02:00
|
|
|
img_ax = fig.subplots(10, 40)
|
2023-07-03 12:17:16 +02:00
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# 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]
|
|
|
|
|
|
|
|
###############################################################################
|
2023-07-05 02:44:20 +02:00
|
|
|
# Affichage des images avec l'étiquette
|
2023-07-03 12:17:16 +02:00
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
print ("\n")
|
2023-07-03 16:52:07 +02:00
|
|
|
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
|
2023-07-03 12:17:16 +02:00
|
|
|
|
|
|
|
print ("\n")
|
|
|
|
|
|
|
|
plt.show()
|