2011-03-13 2 views
0

Mon projet consiste à reconnaître les pièces anciennes. J'utilise Matlab. J'ai déjà un fichier de caractéristiques qui contient à la fois des entrées et des sorties. J'ai formé 3 types de pièces en utilisant newff et net ont été enregistrés. Pour les trois types de pièces, j'ai utilisé 01, 10 et 11 comme cibles. Maintenant, je veux utiliser ce filet entraîné pour les tests. J'ai aussi des images de test. Je codé comme ceci:Matlab - Utiliser un réseau formé pour les tests

load net.mat; 
load features.mat; 
testInputs = Features'; 
out = sim(net,testInputs); 
[dummy, I]=max(out); 

Valeur de I utilise pour vérifier le type de pièce. Si I est 1 alors tapez 1, si 2 puis tapez 2 et si 3 tapez 3. Ai-je raison? Je ces pré-programmée 1,2,3 valeurs parce que j'ai donné des objectifs 01, 10 et 11.

if (I == 2) 
    fprintf('Type1\n'); 
elseif (I == 1) 
    fprintf('Type2\n'); 
elseif (I == 3) 
    fprintf('Type3\n'); 
else 
    fprintf('undefined\n'); 
end 

Bien que maintenant je entrée 3 types d'images de pièces de test, il affiche soit 1 ou 2 pour la valeur I. Mais pas 3. Même lorsque j'utilise le même ensemble d'images qui sont utilisées pour l'entraînement, il donne aussi 1 ou 2 pour la valeur I.

Pouvez-vous s'il vous plaît m'aider?

+0

Regardez la matrice de poids (j'ai oublié comment y accéder) et assurez-vous que votre filet ne s'est pas installé sur un minimum local avec zéro comme poids pour le troisième. – jonsca

+0

Je suis nouveau sur matlab. Peut-on m'expliquer un peu plus? Je ne pouvais pas comprendre ce que vous avez dit ci-dessus. Quand j'entraîne mon jeu de données, pour 3 types de pièces, j'ai donné [0,1], [1,0] et [1,1] comme cibles. Je ne peux pas donner comme ça? Après la formation quand je compare les données entraînées avec mes images de test que j'ai utilisées, out = sim (net, testInputs); [dummy, I] = max (sortie); et alors si (I == 2) fprintf ('Type1 \ n'); elseif (I == 1) fprintf ('Type2 \ n'); elseif (I == 3) fprintf ('Type3 \ n'); sinon fprintf ('non défini \ n'); fin. Est-ce incorrect? Je renvoie toujours 1 ou 2. –

+0

La matrice de poids contient les «forces» de la connexion entre les unités individuelles. Si vous n'êtes pas familier avec cela, vous devriez lire la documentation de Matlab. Vous pouvez ensuite voir dans quelle mesure l'entrée de la troisième unité influence le résultat. – jonsca

Répondre

0

Le deuxième argument de max() vous donnera l'indice du neurone avec une sortie plus élevée. Si vous avez seulement deux neurones, ce qui est le cas si vos cibles sont [0,1], [1,0] et [1,1] (notez seulement deux éléments sur chaque cible), il n'y aura aucun moyen d'obtenir 3 sur ce maximum(). Vous devriez essayer [0,0,1], [0,1,0] et [1,0,0]. D'un autre côté, si vous utilisez tansig comme fonction d'activation des neurones, pensez à utiliser -1 au lieu de 0 sur les cibles, afin de mieux exploiter la non-linéarité. Quelque chose comme [-1, -1,1], [-1,1, -1], [1, -1, -1].

+0

Un grand merci de ma part. Ça marche maintenant :)).. –

Questions connexes