2011-09-12 1 views
2

Je dois classer un ensemble de données en utilisant Matlab MLP et afficher la classification.Matlab Multilayer Perceptron Question

L'ensemble de données ressemble

Click to view

Ce que je l'ai fait jusqu'à présent est:

  1. je créer un réseau de neurones contient une couche cachée (deux neurones ?? peut-être quelqu'un pourrait me donner quelques suggestions sur combien de neurones sont appropriés pour mon exemple) et une couche de sortie (un neurone ).

  2. Je l'ai utilisé plusieurs méthodes d'apprentissage différentes telles que Delta bar Delta, rétropropagation (ces deux méthodes sont utilisées avec ou -out dynamique et Levenberg-Marquardt.)

Ce code je Matlab (exemple Levenberg-Marquardt)

net = newff(minmax(Input),[2 1],{'logsig' 'logsig'},'trainlm'); 
net.trainParam.epochs = 10000; 
net.trainParam.goal = 0; 
net.trainParam.lr = 0.1; 
[net tr outputs] = train(net,Input,Target); 

l'exemple suivant montre les limites de classification des neurones cachés générés par Matlab sur les données, je suis peu confus, beacause réseau devrait produire résultat non linéaire, mais le résultat ci-dessous semble que deux limites sont linéaires ..

Click to view

Le code pour générer ci-dessus parcelle est:

figure(1) 
plotpv(Input,Target); 
hold on 
plotpc(net.IW{1},net.b{1}); 
hold off 

Je dois aussi tracer la fonction de sortie le neurone de sortie, mais je suis bloquant sur cette étape. Quelqu'un peut-il me donner quelques suggestions?

Merci d'avance.

Répondre

2

En ce qui concerne le nombre de neurones dans la couche cachée, pour un si petit exemple deux sont plus que suffisant. La seule façon de savoir avec certitude l'optimum est de tester avec des nombres différents. Dans cette FAQ, vous pouvez trouver une règle de base qui peut être utile: http://www.faqs.org/faqs/ai-faq/neural-nets/

Pour la fonction de sortie, il est souvent utile de le diviser en deux étapes:

Premièrement, étant donné le vecteur d'entrée x, la sortie des neurones dans la couche cachée est y = f (x) = x^T w + bw est la matrice de pondération des neurones d'entrée à la couche cachée et b est le vecteur de polarisation.

Deuxièmement, on devra appliquer la fonction d'activation g du réseau pour le vecteur résultant de l'étape précédente z = g (y)

Enfin, la sortie est le produit scalaire h (z) = z. v + n, où v est le vecteur de poids de la couche cachée au neurone de sortie et n le biais. Dans le cas de plus d'un neurones de sortie, vous répéterez ceci pour chacun d'eux. Je n'ai jamais utilisé les fonctions matlab mlp, donc je ne sais pas comment obtenir les poids dans ce cas, mais je suis sûr que le réseau les stocke quelque part. Edit: Recherche dans la documentation I trouvé que les propriétés:

  • net.IW numLayers par numInputs réseau de cellules de poids de valeurs d'entrée
  • net.LW numLayers par numLayers réseau de cellules de poids de couche valeurs
  • net.b numLayers-by-1 tableau de cellules de valeurs de biais
+0

Merci beaucoup! Pensez-vous que logsig est une méthode d'entraînement appropriée pour les neurones des deux couches? –

+0

Oui, la fonction logistique est le choix habituel pour les ensembles de données simples, bien que vous pouvez essayer aussi tanh. Consultez la FAQ pour plus de détails (deuxième partie, "Pourquoi utiliser la fonction d'activation?") – skd

Questions connexes