Beispiel #1
0
    def train_record(self):
        """Méthode qui pour tout element p de test_params substitue p comme le hyperparametre a essayer, entraîne
         un autoencodeur avec cet hyperparametre et sauvegarde la perte finale, tout en gardant les
         autres hyperparametres constants.
         """

        self.x = []
        for i in range(len(self.test_params)):
            self.params[self.param_non_fixe] = self.test_params[i]
            couche1 = self.params[0]
            couche2 = self.params[1]
            couche3 = self.params[2]
            dim_lat = self.params[3]
            epochs = self.params[4]
            learning_rate = self.params[5]
            kl_poids = self.params[6]

            self.autoencodeur = projetae.AutoEncodeur(784, dim_lat, couche1, couche2, couche3, kl_poids)
            perte = projetae.train(self.autoencodeur, learning_rate, epochs)
            if perte is None:
                return
            self.pertes.append((perte))
            self.x.append(self.test_params[i])
            print('Expérience ', i, ' Param: ', self.test_params[i], " Perte: ", perte )
    def train(self, params=[]):
        '''Méthode principale de l'entrainement.

        Elle vérifie que les hyperparametres sont correctement choisis a l'aide
        de la méthode verifier_params() et, si les hyperparametres sont choisis correctement elle entraine l'autoencodeur a
        l'aide de la méthode train() de classe Autoencodeur. Finalement cette méthode active les boutons dépendantes aux résultats
        de l'entrainement et change le statut de l'entrainement.
        '''

        print('VÉRIFICATION DES HYPERPARAMETRES')
        self.progress.configure(
            text=
            "              VÉRIFICATION DES HYPERPARAMETRES                  ")
        self.progress.place(x=100, y=410)

        if params == []:
            # Preparation des hyperparametres entieres et de learning rate
            self.params = self.toint([
                self.couchelatente.get(),
                self.couche1.get(),
                self.couche2.get(),
                self.couche3.get(),
                self.epochs.get()
            ])
        else:
            self.params = params
        lr = float(self.lr.get())
        # Parametres incorrectement saisis: signaler ceci a l'utilisateur et sortir
        if (self.verifier_params(self.params, lr) == -1):
            print('ECHEC DES HYPERPARAMETRES')
            return
        else:
            self.progress.configure(
                text="           ENTRAÎNEMENT COMMENCE                ")
            print('ENTRAINEMENT COMMENCE')

            self.autoencoder = projetae.AutoEncodeur(
                input_dim=784,
                latent_dim=self.params[0],
                dim_couche_1=self.params[1],
                dim_couche_2=self.params[2],
                dim_couche_3=self.params[3],
                kl_poids=0.0012)
            # Entraînement
            perte = projetae.train(self.autoencoder, lr, self.params[4])
            # Message de fin de l'entraînement
            self.progress = tk.Label(
                self.training,
                text="ENTRAÎNEMENT FINI AVEC PERTE FINALE " + str(perte) +
                " %",
                bg='darkslategrey',
                fg='white',
                font=("Courier New", 16, "bold"))
            self.progress.place(x=200, y=410)

            # Activation des boutons:
            if self.params[0] == 2:
                self.plotbouton.configure(
                    state='active'
                )  # Graphique disponible seulement pour dim = 2
            self.checkbouton.configure(state='active')
            self.morceaubouton.configure(state='active')
            self.training_status = 1
 def test_symmetrie(self):
     """Test de symmétrie: couche d'entrée et couche de sortie"""
     self.ae = projetae.AutoEncodeur(2, 512, 128, 16, 0.01, 0.0012)
     inputdim = self.ae.input_dim
     outputdim = self.ae.decoder.output_dim
     self.assertEqual(inputdim, outputdim)
 def test_symmetrie_c3(self):
     """Test de symmétrie: derniere couche avant couche latente, premiere couche apres couche latente"""
     self.ae = projetae.AutoEncodeur(2, 512, 128, 16, 0.01, 0.0012)
     premiere_couche = self.ae.encoder.c3.units
     derniere_couche = self.ae.decoder.c1.units
     self.assertEqual(premiere_couche, derniere_couche)
 def test_symmetrie_c2(self):
     """Test de symmétrie: deuxieme couche apres entrée, deixueme couche avant sortie"""
     self.ae = projetae.AutoEncodeur(2, 512, 128, 16, 0.01, 0.0012)
     premiere_couche = self.ae.encoder.c2.units
     derniere_couche = self.ae.decoder.c2.units
     self.assertEqual(premiere_couche, derniere_couche)
    def __init__(self):

        # Fenetre principale
        self.fenetre = tk.Tk()
        self.fenetre.geometry("1200x670")

        # Donnees et autoencodeur
        self.donnees, labels = projetae.Donnees.test_donnees_mnist()
        self.autoencoder = projetae.AutoEncodeur(input_dim=784,
                                                 latent_dim=2,
                                                 dim_couche_1=512,
                                                 dim_couche_2=256,
                                                 dim_couche_3=32,
                                                 kl_poids=0.0012)

        # Endroit pour l'entrainement
        self.training = tk.Frame(master=self.fenetre,
                                 width=700,
                                 height=95,
                                 bg='cornflowerblue')
        self.training.place(x=50, y=35)
        titre1 = tk.Label(self.fenetre,
                          text="1. Entraînez un autoencodeur:").place(x=50,
                                                                      y=10)
        self.entrainer = tk.Button(self.fenetre,
                                   text="Commencer l'entraînement",
                                   bg="steelblue",
                                   activebackground="limegreen",
                                   fg='white',
                                   activeforeground='white',
                                   command=self.train).place(x=75, y=75)
        self.ecran = tk.Frame(master=self.fenetre,
                              width=490,
                              height=82,
                              bg='navy').place(x=250, y=42)
        self.progress = tk.Label(self.fenetre,
                                 text=". . .",
                                 bg='navy',
                                 fg='white').place(x=500, y=70)

        # Endroit pour le choix des images
        self.training = tk.Frame(master=self.fenetre,
                                 width=700,
                                 height=95,
                                 bg='cornflowerblue')
        self.training.place(x=50, y=152)
        titre2 = tk.Label(self.fenetre,
                          text="2. Choisissez deux images:").place(x=50, y=131)
        instruction = tk.Label(
            self.fenetre,
            text="Entrez deux entiers entre 0 et 9999 pour choisir deux images",
            bg='cornflowerblue',
            fg='white').place(x=56, y=160)
        self.entree1 = tk.Entry(self.fenetre)
        self.entree1.place(x=80, y=200)
        self.entree2 = tk.Entry(self.fenetre)
        self.entree2.place(x=320, y=200)

        # Endroit pour afficher les images choisies
        self.images = tk.Frame(master=self.fenetre,
                               width=335,
                               height=350,
                               bg='cornflowerblue')
        self.images.place(x=50, y=275)
        titre3 = tk.Label(
            self.fenetre,
            text="3. Images choisies et leurs représentations vectorielles:"
        ).place(x=50, y=250)
        self.melanger = tk.Button(self.fenetre,
                                  text="Mélanger les images",
                                  bg="steelblue",
                                  activebackground="limegreen",
                                  fg='white',
                                  activeforeground='white',
                                  command=self.affichEntree).place(x=150,
                                                                   y=630)
        # Endroit pour image1:
        self.figure1 = plt.Figure(figsize=(1.5, 1.5))
        self.im1 = FigureCanvasTkAgg(self.figure1, master=self.fenetre)
        self.im1.get_tk_widget().place(x=60, y=290)
        self.axis1 = self.figure1.add_subplot(1, 1, 1)
        self.axis1.get_xaxis().set_visible(False)
        self.axis1.get_yaxis().set_visible(False)
        label1 = tk.Label(self.fenetre,
                          text="Vecteur 1: ",
                          bg='cornflowerblue',
                          fg='white',
                          font=("Courier", 12)).place(x=240, y=300)
        self.vect1 = tk.Label(self.fenetre,
                              text="...",
                              bg='cornflowerblue',
                              fg='white').place(x=230, y=340)

        # Endroit pour image 2:
        self.figure2 = plt.Figure(figsize=(1.5, 1.5))
        self.im2 = FigureCanvasTkAgg(self.figure2, master=self.fenetre)
        self.im2.get_tk_widget().place(x=60, y=460)
        self.im2.draw()
        self.axis2 = self.figure2.add_subplot(1, 1, 1)
        self.axis2.get_xaxis().set_visible(False)
        self.axis2.get_yaxis().set_visible(False)
        label2 = tk.Label(self.fenetre,
                          text="Vecteur 2: ",
                          bg='cornflowerblue',
                          fg='white',
                          font=("Courier", 12)).place(x=240, y=470)
        self.vect2 = tk.Label(self.fenetre,
                              text="...",
                              bg='cornflowerblue',
                              fg='white').place(x=230, y=510)

        # Endroit pour afficher les resultats
        self.images = tk.Frame(master=self.fenetre,
                               width=335,
                               height=350,
                               bg='cornflowerblue')
        self.images.place(x=411, y=275)
        titre4 = tk.Label(self.fenetre,
                          text="4. Image résultante:").place(x=411, y=250)

        label3 = tk.Label(self.fenetre,
                          text="Vecteur résultant: ",
                          bg='cornflowerblue',
                          fg='white',
                          font=("Courier", 12)).place(x=420, y=280)
        self.vect3 = tk.Label(self.fenetre,
                              text="...",
                              bg='cornflowerblue',
                              fg='white').place(x=425, y=315)

        self.figure3 = plt.Figure(figsize=(2.75, 2.75))
        self.im3 = FigureCanvasTkAgg(self.figure3, master=self.fenetre)
        self.im3.get_tk_widget().place(x=440, y=340)
        self.im3.draw()
        self.axis3 = self.figure3.add_subplot(1, 1, 1)
        self.axis3.get_xaxis().set_visible(False)
        self.axis3.get_yaxis().set_visible(False)

        recommencer = tk.Label(
            self.fenetre,
            text="Pour récommencer, saisissez deux nouveaux entiers",
            fg='black').place(x=400, y=630)