7
votes

Xor NEALAL NETWORK EN JAVA

J'essaie de mettre en œuvre et de former un réseau neuronal de cinq neurones avec une propagation du dos pour la fonction XOR en Java. Mon code (veuillez excuser son hidingness): xxx

si cela aide tout, voici un Diagramme du réseau .

Les valeurs initiales de tous les poids et de la vitesse d'apprentissage sont prises directement à partir d'un exemple de mon manuel. L'objectif est de former le réseau jusqu'à ce que la somme des erreurs carrées soit inférieure à 0,001. Le manuel donne également les valeurs de tous les poids après la première itération (1,1,0) et j'ai testé mon code et ses résultats correspondent parfaitement aux résultats du manuel. Mais selon le livre, cela ne devrait prendre que 224 époques de converger. Mais quand je l'exécute, il atteint toujours Max_epochs à moins que cela soit défini sur plusieurs milliers. Qu'est-ce que je fais mal?


2 commentaires

Dans votre diagramme, la flèche w14 est mal cloutée comme w24 .


J'ai changé le taux d'apprentissage à 19.801 (qui est généralement trop élevé) et atteint l'erreur souhaitée dans 300 époques. Je pense qu'ils ont pris un autre taux d'apprentissage. Mais il pourrait y avoir une erreur dans votre code aussi.


3 Réponses :


1
votes

Essayez de faire des arrondies de gamma3, gamma4, gamma5 tandis que dans la phase d'activation pour l'instace: xxx

et montée de peu de bit apprendre variable (alpha) xxx

L'apprentissage se termine dans 466 époques.

Bien sûr, si vous faites un arrondi plus gros et plus élevé alpha u jeu u peut atteindre encore mieux que 224.


0 commentaires

2
votes
    //Add this in the constants declaration section.
    private static double alpha = 3.8, g34 = 0.13, g5 = 0.21;

    // Add this in activate neuron
    gamma3 = sigmoid(x1 * w13 + x2 * w23 - theta3);
    gamma4 = sigmoid(x1 * w14 + x2 * w24 - theta4);        
    if (gamma3 > 1 - g34 ) {gamma3 = 1;}
    if (gamma3 < g34) {gamma3 = 0;}
    if (gamma4 > 1- g34) {gamma4 = 1;}
    if (gamma4 < g34) {gamma4 = 0;}   
    gamma5 = sigmoid(gamma3 * w35 + gamma4 * w45 - theta5);
    if (gamma5 > 1 - g5) {gamma5 = 1;}
    if (gamma5 < g5) {gamma5 = 0;}
ANN should learn in 66 iterations, but is on the brink of divergence.

0 commentaires

1
votes

Un point entier de ce réseau consiste à montrer comment faire face à une situation lorsque le regroupement n'est pas basé sur "top = oui, inférieur = non", mais il existe plutôt une ligne centrale (points de passage (0,1) et (1,0) dans ce cas) et si la valeur est proche de la ligne, la réponse est "oui", alors que si elle est loin, la réponse est "non". Vous ne pouvez pas regrouper ce système avec une seule couche. Cependant, deux couches suffisent.


0 commentaires