/// <summary> /// Calcule des erreurs (gradiant local) des neurones de la couche de sortie /// </summary> /// <param name="tests">Jeu de tests</param> /// <param name="cible">Cible (valeur désirée) pour chaque jeu de test</param> private void CalculerDeltaO(double[] cible) { Couche coucheSortie = Couches[Couches.Length - 1]; for (int k = 0; k < coucheSortie.Neurones.Length; k++) { Neurone neuroneO = coucheSortie.Neurones[k]; double ecart = 0.0; ecart = cible[k] - neuroneO.Sortie; neuroneO.Erreur = neuroneO.TransfertDerivee(neuroneO.Somme + neuroneO.Biais) * ecart; //Debug.WriteLine("Gradiant O: " + neuroneO.Erreur.ToString()); } }
/// <summary> /// Calcule de l'erreur (gradiant local) des neurones des couches cachées /// </summary> /// <param name="couche1">Couche cachée N</param> /// <param name="couche2">Couche N + 1</param> /// <returns></returns> private void CalculerDeltaH(Couche couche1, Couche couche2) { for (int k = 0; k < couche1.Neurones.Length; k++) { Neurone neuroneH = couche1.Neurones[k]; double somme = 0.0; for (int i = 0; i < couche2.Neurones.Length; i++) { Neurone neurone2 = couche2.Neurones[i]; somme += neurone2.Poids[k] * neurone2.Erreur; } neuroneH.Erreur = neuroneH.TransfertDerivee(neuroneH.Somme + neuroneH.Biais) * somme; //Debug.WriteLine("Gradiant H: " + neuroneH.Erreur.ToString()); } }