IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

Amélioration de la recherche de solution en machine learning


Sujet :

Intelligence artificielle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Amélioration de la recherche de solution en machine learning
    Bonjour,
    Je suis étudiant et à mes heures perdues j'ai découvert et essayé de faire un peu de machine learning. (enfin je crois)
    En cherchant comment débuter dans l'apprentissage du machine learning, je me suis retrouvé sur cette page web : [How to build a simple neural network] qui est à mon sens très bien.
    Suite à cette lecture, j'ai essayé de coder du machine learning en Python. J'ai alors réalisé ce code :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    import numpy as np
    import random as rd
    import matplotlib.pyplot as plt
     
     
    def output_calcul(val,weight):
        output = 0
        for i in range(len(weight)):
            output += val[i] * weight[i]
        return output
     
    def output_neuron_calcul(output):
        neuron = 1/(1 + np.exp(-output))
        return neuron
     
    def sigm_calcul(output):
        #sigm = output * (1 - output)
        sigm = 1/(2 + np.exp(output) + np.exp(-output))
        return sigm
     
    def adjust_calcul(error,val,sigm):
        return error * val * sigm
     
    ##
     
    plt.close("all")
     
    weight_goal = np.array([0.8,0.6,0.2])
    weight = np.array([0.1,0.5,0.7])
     
    Error = []
    Weight = [[],[],[]]
    T = []
     
    nb_error = 0
    t = 0    
    while nb_error < 100:
        t += 1
     
        val = np.array((rd.randint(0,10),rd.randint(0,10),rd.randint(0,10)))
        expected_output = output_calcul(val,weight_goal)
     
        output = output_calcul(val,weight)
        neuron = output_neuron_calcul(output)
        sigm = sigm_calcul(output)
        error = expected_output - output
     
        if abs(error) < 10e-2:
            nb_error += 1
        else:
            nb_error = 0
     
        T.append(t)
        Error.append(error)
     
        for i in range(len(weight)):
     
            input_val = val[i]
            adjust = adjust_calcul(error,input_val,sigm)
            weight[i] += adjust
     
            Weight[i].append(weight[i])
     
        if t % 1000 == 0:
     
            plt.pause(0.001)
            plt.clf()
     
            plt.plot(T,Error,label=Error[-1])
            plt.plot(T,Weight[0],label=Weight[0][-1])
            plt.plot(T,Weight[1],label=Weight[1][-1])
            plt.plot(T,Weight[2],label=Weight[2][-1])
     
            plt.legend()
            plt.show()
     
    plt.clf()
     
    plt.plot(T,Error,label=Error[-1])
    plt.plot(T,Weight[0],label=Weight[0][-1])
    plt.plot(T,Weight[1],label=Weight[1][-1])
    plt.plot(T,Weight[2],label=Weight[2][-1])
     
    plt.legend()
    plt.show()
    (en cas de non clarté, n'hésitez pas à me demander)
    Ce code a pour but de faire trouver au programme le "weight_goal" en lui faisant évoluer "weight". J'utilise donc les formules données sur le site précédent (même si je trouve un léger problème au niveau de la dérivé du 1/(1+exp(-x)) ) Ce code fonctionne plutôt bien mais voila quelques fois il s'arrête avant la fin ou cherche à l'infini (ou du moins sur un temps très long).
    Alors ma question est là, comment pourrais-je l'améliorer et le rectifier ?
    De plus ici lorsque je prends des valeurs au hasard, je les prends entre 0 et 10 et dès que je prends 0,100 ou -10,10 tout se complique et tout devient plus long (ce qui est assez normal) mais encore une fois comment améliorer tout cela ?

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut


    De ce que je comprends de ton code, tu génères aléatoirement des poids, tu fais une mise à jour selon les erreurs que tu vois avec ces poids… puis tu repars sur de nouveaux poids. Tu pourrais effectuer beaucoup plus d'itérations de descente de gradient (cent, mille, dix mille, par exemple).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    C'est exactement ça.
    Je n'ai pas compris la solution que vous me proposez...

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Ce que tu as actuellement :

    Code julia : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in 1:100
        theta = random()
        theta -= eta * gradient # une itération de descente de gradient
    end

    Ce que je te propose :

    Code julia : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    theta = random()
    for i in 1:100
        theta -= eta * gradient # une itération de descente de gradient
    end
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/05/2014, 09h45
  2. Réponses: 7
    Dernier message: 20/03/2012, 16h58
  3. Besoin d'aide pour bien débuter avec VS2008
    Par starlud dans le forum Visual Studio
    Réponses: 0
    Dernier message: 12/06/2010, 17h06
  4. Réponses: 1
    Dernier message: 01/05/2010, 17h52
  5. Besoin d'aide pour débuter en Doja.
    Par themoye dans le forum Java ME
    Réponses: 4
    Dernier message: 20/09/2006, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo