refactored code into functions to ease understanding inputs and outputs
work related to [https://bugzilla.ipr.univ-rennes.fr/show_bug.cgi?id=3345]
This commit is contained in:
parent
01a6973fbb
commit
13f219f3f8
|
|
@ -1,61 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
Created on Wed Sep 25 14:19:41 2024
|
|
||||||
|
|
||||||
@author: errobin
|
|
||||||
"""
|
|
||||||
|
|
||||||
import numpy as np # pour faire du calcul matriciel
|
|
||||||
from PIL import Image # pour lire une image
|
|
||||||
# import matplotlib.pyplot as plt # pour faire des tracer
|
|
||||||
|
|
||||||
# lecture image ######################################
|
|
||||||
|
|
||||||
image_file = Image.open("GAN.bmp")
|
|
||||||
image_bmp = 1. * np.array(image_file) # on transforme le fichier en matrice nommée image_bmp
|
|
||||||
image_file.close() # fermeture du fichier en lecture
|
|
||||||
|
|
||||||
#####################################################
|
|
||||||
# code pour aider à comprendre une image
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# recupère les dimension de l'image ###############
|
|
||||||
dim = image_bmp.shape
|
|
||||||
|
|
||||||
nb_ligne = dim[0]
|
|
||||||
nb_colonne = dim[1]
|
|
||||||
image_traitee = np.zeros((nb_ligne, nb_colonne)) # déclaration d'un tableau au dimension de l'image
|
|
||||||
###################################################
|
|
||||||
|
|
||||||
# Affecte les valeurs de la matrice image_bmp à image_traitee
|
|
||||||
for colonne in range(0, nb_colonne):
|
|
||||||
for ligne in range(0, nb_ligne):
|
|
||||||
|
|
||||||
image_traitee[ligne, colonne] = image_bmp[ligne, colonne] # regarder les tableaux avec variable explorer
|
|
||||||
|
|
||||||
# if False:
|
|
||||||
# plt.imshow(image_traitee,'gray')
|
|
||||||
# plt.show()
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# fin code pour comprendre une image
|
|
||||||
|
|
||||||
# DS partie Data
|
|
||||||
# complétez le code suivant pour créer votre database tq; x_train = position du pixel et y_target = couleur du pixel
|
|
||||||
|
|
||||||
# declaration des tableaux
|
|
||||||
X_train = np.zeros((nb_colonne * nb_ligne, 2))
|
|
||||||
Y_target = np.zeros((nb_colonne * nb_ligne))
|
|
||||||
|
|
||||||
compt = 0
|
|
||||||
for colonne in range(0, nb_colonne):
|
|
||||||
for ligne in range(0, nb_ligne):
|
|
||||||
X_train[compt, 0] = colonne
|
|
||||||
X_train[compt, 1] = ligne
|
|
||||||
|
|
||||||
Y_target[compt] = image_bmp[colonne, ligne] / 255.
|
|
||||||
compt = compt + 1
|
|
||||||
|
|
||||||
# sauvagarde de la database
|
|
||||||
np.savetxt("X_train.txt", X_train, delimiter=';')
|
|
||||||
np.savetxt("Y_target.txt", Y_target, delimiter=';')
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
Created on Wed Sep 25 14:38:32 2024
|
|
||||||
|
|
||||||
@author: errobin
|
|
||||||
"""
|
|
||||||
|
|
||||||
# DS partie Train
|
|
||||||
# complétez/joué sur les hyperparamètres (vitesse d'apprentissage et nb epoch) et sur l'architecture du modèle pour l'entrainer et pour le sauver (une fois entrainé)
|
|
||||||
# ASTUCE un loss inférieur à 0.005 permets déjà d'obtenir des résultats intéréssants
|
|
||||||
|
|
||||||
|
|
||||||
import time
|
|
||||||
import tensorflow as tf
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
X_train = np.genfromtxt('X_train.txt', delimiter=';')
|
|
||||||
Y_target = np.genfromtxt('Y_target.txt', delimiter=';')
|
|
||||||
|
|
||||||
# Partie ANN definition + entrainement
|
|
||||||
# *****************************************
|
|
||||||
model = tf.keras.models.Sequential()
|
|
||||||
|
|
||||||
model.add(tf.keras.layers.Dense(2048, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(1024, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(512, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(256, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(128, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(64, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(32, activation="relu"))
|
|
||||||
model.add(tf.keras.layers.Dense(1))
|
|
||||||
|
|
||||||
model.compile(
|
|
||||||
loss="mse",
|
|
||||||
optimizer="adam"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def scheduler(epoch): # dans cette fonction il est possible de faire des test if en fonction de epoch pour retourner différente valeur de la ???
|
|
||||||
return 0.0001
|
|
||||||
|
|
||||||
|
|
||||||
callback_vitesse_apprentissage = tf.keras.callbacks.LearningRateScheduler(scheduler)
|
|
||||||
###################################################################
|
|
||||||
|
|
||||||
start_time = time.time()
|
|
||||||
model.fit(X_train, Y_target, epochs=3, verbose=1, callbacks=[callback_vitesse_apprentissage])
|
|
||||||
end_time = time.time()
|
|
||||||
temps_cal = end_time - start_time
|
|
||||||
print(temps_cal)
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Wed Sep 25 14:38:32 2024
|
||||||
|
|
||||||
|
@author: errobin
|
||||||
|
"""
|
||||||
|
|
||||||
|
# DS partie Train
|
||||||
|
# complétez/joué sur les hyperparamètres (vitesse d'apprentissage et nb epoch) et sur l'architecture du modèle pour l'entrainer et pour le sauver (une fois entrainé)
|
||||||
|
# ASTUCE un loss inférieur à 0.005 permets déjà d'obtenir des résultats intéréssants
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import time
|
||||||
|
import tensorflow as tf
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def scheduler(epoch): # dans cette fonction il est possible de faire des test if en fonction de epoch pour retourner différente valeur de la ???
|
||||||
|
return 0.0001
|
||||||
|
|
||||||
|
|
||||||
|
def learn(X_train: np.array, Y_target: np.array, learning_rate_scheduler):
|
||||||
|
|
||||||
|
assert X_train.shape[0] == Y_target.shape[0]
|
||||||
|
# Partie ANN definition + entrainement
|
||||||
|
# *****************************************
|
||||||
|
model = tf.keras.models.Sequential()
|
||||||
|
|
||||||
|
model.add(tf.keras.layers.Dense(2048, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(1024, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(512, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(256, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(128, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(64, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(32, activation="relu"))
|
||||||
|
model.add(tf.keras.layers.Dense(1))
|
||||||
|
|
||||||
|
model.compile(
|
||||||
|
loss="mse",
|
||||||
|
optimizer="adam"
|
||||||
|
)
|
||||||
|
|
||||||
|
callback_vitesse_apprentissage = tf.keras.callbacks.LearningRateScheduler(learning_rate_scheduler)
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
model.fit(X_train, Y_target, epochs=3, verbose=1, callbacks=[callback_vitesse_apprentissage])
|
||||||
|
end_time = time.time()
|
||||||
|
temps_cal = end_time - start_time
|
||||||
|
print(temps_cal)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
X_train = np.genfromtxt(Path('X_train.txt'), delimiter=';')
|
||||||
|
Y_target = np.genfromtxt(Path('Y_target.txt'), delimiter=';')
|
||||||
|
learn(X_train, Y_target, learning_rate_scheduler=scheduler)
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Wed Sep 25 14:19:41 2024
|
||||||
|
|
||||||
|
@author: errobin
|
||||||
|
"""
|
||||||
|
from typing import Tuple
|
||||||
|
from pathlib import Path
|
||||||
|
import numpy as np # pour faire du calcul matriciel
|
||||||
|
from PIL import Image # pour lire une image
|
||||||
|
# import matplotlib.pyplot as plt # pour faire des tracer
|
||||||
|
|
||||||
|
|
||||||
|
def create_training_set(image_file_path: Path) -> Tuple[np.array, np.array]:
|
||||||
|
image_file = Image.open(image_file_path)
|
||||||
|
image_bmp = 1. * np.array(image_file) # on transforme le fichier en matrice nommée image_bmp
|
||||||
|
image_file.close() # fermeture du fichier en lecture
|
||||||
|
|
||||||
|
# lecture image ######################################
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# code pour aider à comprendre une image
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# recupère les dimension de l'image ###############
|
||||||
|
dim = image_bmp.shape
|
||||||
|
|
||||||
|
nb_ligne = dim[0]
|
||||||
|
nb_colonne = dim[1]
|
||||||
|
image_traitee = np.zeros((nb_ligne, nb_colonne)) # déclaration d'un tableau au dimension de l'image
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
# Affecte les valeurs de la matrice image_bmp à image_traitee
|
||||||
|
for colonne in range(0, nb_colonne):
|
||||||
|
for ligne in range(0, nb_ligne):
|
||||||
|
|
||||||
|
image_traitee[ligne, colonne] = image_bmp[ligne, colonne] # regarder les tableaux avec variable explorer
|
||||||
|
|
||||||
|
# if False:
|
||||||
|
# plt.imshow(image_traitee,'gray')
|
||||||
|
# plt.show()
|
||||||
|
|
||||||
|
#################################################################################
|
||||||
|
# fin code pour comprendre une image
|
||||||
|
|
||||||
|
# DS partie Data
|
||||||
|
# complétez le code suivant pour créer votre database tq; x_train = position du pixel et y_target = couleur du pixel
|
||||||
|
|
||||||
|
# declaration des tableaux
|
||||||
|
X_train = np.zeros((nb_colonne * nb_ligne, 2))
|
||||||
|
Y_target = np.zeros((nb_colonne * nb_ligne))
|
||||||
|
|
||||||
|
compt = 0
|
||||||
|
for colonne in range(0, nb_colonne):
|
||||||
|
for ligne in range(0, nb_ligne):
|
||||||
|
X_train[compt, 0] = colonne
|
||||||
|
X_train[compt, 1] = ligne
|
||||||
|
|
||||||
|
Y_target[compt] = image_bmp[colonne, ligne] / 255.
|
||||||
|
compt = compt + 1
|
||||||
|
|
||||||
|
return X_train, Y_target
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
X_train, Y_target = create_training_set(Path('./GAN.bmp'))
|
||||||
|
# sauvagarde de la database
|
||||||
|
np.savetxt(Path('X_train.txt'), X_train, delimiter=';')
|
||||||
|
np.savetxt(Path('Y_target.txt'), Y_target, delimiter=';')
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
Loading…
Reference in New Issue