2011-08-18 4 views
0

Mon jeu de données comprend 29 entrées et 6 sorties. Quand j'utilisePourquoi newff() ne fonctionne pas correctement quand j'utilise ses arguments!

net = newff(minmax(Pl),[14 12 8 6]); 

pour construire mon avancement réseau MLP et de former par

net.trainParam.epochs=50; 
net=train(net,Pl,Tl); 

le réseau ne peut pas apprendre mon ensemble de données et son erreur ne diminue pas au-dessous de 0,7, mais quand je l'utilise arguments de newff fonctionnent comme ceci:

net=newff(minmax(Pl),[14 12 8 6],{'tansig' 'tansig' 'tansig' 'purelin'},'trainlm'); 

l'erreur est diminuée très rapidement et il vient en dessous de 0,0001! La note inhabituelle est que lorsque j'utilise le code précédent en utilisant une seule couche comprenant 2 neurones:

net=newff(minmax(Pl),[2 6],{'tansig' 'purelin'},'trainlm'); 

l'erreur est réduite en dessous de 0,2 à nouveau et il est douteux! S'il vous plaît me donner quelques conseils et aidez-moi de savoir quelle est la différence entre:

net = newff(minmax(Pl),[14 12 8 6]); 

et

net=newff(minmax(Pl),[14 12 8 myANN.m],{'tansig' 'tansig' 'tansig' 'purelin'},'trainlm'); 

?

+0

Quelle version de MATLAB utilisez-vous? Aussi, n'utilisez pas autant de couches cachées. Vous en avez besoin d'un, peut-être deux. Backprop à travers de nombreuses couches ne fonctionne pas bien. – kwatford

+0

aussi quelles sont les dimensions de vos données d'entrée/cible? – Amro

Répondre

0

Je pense que le deuxième argument à NEWFF(lien nécessite une connexion) est censé être les vecteurs cibles, pas la taille des couches cachées (qui est le troisième argument).

Notez que la fonction de transfert par défaut pour les couches masquées est tansig et que la couche de sortie est purelin, et que l'algorithme d'apprentissage par défaut est trainlm. Enfin, n'oubliez pas que si vous voulez obtenir des résultats reproductibles, vous devez réinitialiser manuellement le générateur de nombres aléatoires à un état fixe au début de chaque série.

+0

Une ancienne version de 'newff' utilisait la convention d'appel qu'il utilisait, il pouvait donc avoir une ancienne version de MATLAB. Dans certaines de ces versions, l'entraîneur par défaut était 'traingdx' plutôt que' trainlm', ce qui signifie que cela pourrait avoir un impact. – kwatford

+0

@kwatord: merci de l'avoir signalé (savez-vous quelle version exactement?) BTW Dans la dernière version, 'newff' est devenu totalement obsolète) .. Le point principal est de ne pas oublier de graver le générateur de nombres aléatoires de la même manière avant chaque passage , si vous voulez comparer le résultat de l'entraînement des réseaux de neurones. – Amro

Questions connexes