2014-05-19 3 views
1

Je suis en train d'écrire en utilisant l'infrastructure (réseau de neurones) ci-dessus sur l'application Windows Phone 8 et j'ai installé la version PCL here.réseau neuronal sur Windows Phone 8.0

j'ai écrit ci-dessous le code:

Pivotpage.xaml.cs

_inputDataGelen = new double[4] { 0.067, 0.033, 0.057, 0.021 }; 

double compute = network.Compute(_inputDataGelen)[0]; // (1) 
//MessageBox.Show("Output is "+ Math.Round(compute)); 

J'essaie même code sur l'application de bureau et je reçois Compute comme 0,00112 .. ou 0,01283 .., 0,02123 .., 0,03231 .., 0,04159 ... donc, si j'Arrondir à un chiffre 0,1,2,3,4 ...

Mais quand j'ai essayé sur le projet Windows Phone 8, je reçois Compute comme un 0,9999995345.

Quel est mon problème.

Merci d'avance. (Désolé ma langue.)

+0

De quel type est la variable 'network', et comment l'avez-vous initialisé? –

+0

J'ai utilisé l'initialisation de votre [question précédente] (http://stackoverflow.com/q/23717779/650012) sauf que j'ai changé * input count * de 9 à 4. En appelant 'Compute', j'obtiens des valeurs proches de 1 peu importe quand j'essaie cela sur Windows Phone (avec les binaires * Cureos *) ou si je l'essaie dans une application console avec les assemblages NuGet. Pouvez-vous s'il vous plaît montrer le code de l'application de bureau qui donne les résultats que vous attendez? –

Répondre

0

code de bureau:

ActivationNetwork network = null; //global variable 
bool dongu = false; 
... 
... 

network = new ActivationNetwork(
      new BipolarSigmoidFunction(2), //activation func. 
      4,        //input count 
      20,       //hidden layer count 
      1);       //output count  

     //Learning Network 
     BackPropagationLearning backprob = new BackPropagationLearning(network); 
     backprob.LearningRate = 0.1; 
     backprob.Momentum = 0.0; 

     int iteration = 1; 
     double hata = 0.0; 
     //loop 
     while(!dongu) 
     { 
      hata = backprob.RunEpoch(_inputData, _outputData); 

      iteration++; 

      if (iteration > 10000 || hata < 0.0001) 
       break; 

     } 

     double a1 = Convert.ToDouble(textBox3.Text); 
     double a2 = Convert.ToDouble(textBox4.Text); 
     double a3 = Convert.ToDouble(textBox5.Text); 
     double a4 = Convert.ToDouble(textBox6.Text); 

     //Actually devide 100. Not 1000. 
     double[] girdi = { a1/1000, a2/1000, a3/1000, a4/1000 }; //normalize 


     textBox1.Text = network.Compute(girdi)[0].ToString() + " compute"; //output ile aynı değer geliyor 

     double find = network.Output[0]*100; //denormalize 

     //textBox2.Text = (network.Output[0]).ToString() + " output"; //compute ile aynı değer geliyor 

     //tam sayıya yuvarlama 
     find = Math.Round(find,1); 


     if (find >= 0.0 && find <= 1.7) //bu aralık optimize edilebilir 
     { 
      //MessageBox.Show("Iris-setosa"); 
      textBox7.Text = "1"; 
     } 

     else if (find > 1.7 && find <= 2.6) 
     { 
      //MessageBox.Show("Iris-versicolor"); 
      textBox7.Text = "2"; 
     } 

     else if (find > 2.6 && find <= 3.7) 
     { 
      //MessageBox.Show("Iris-virginica"); 
      textBox7.Text = "3"; 
     } 

set train est here

@Anders Gustafsson, ce code de travail sur le bureau. Si j'entre 5.1, 3.5, 1.4, 0.2 nombres doubles je donne la sortie est 1.

+0

Osman, je vais regarder cela plus en détail quand j'ai le temps. En attendant, je pense que vous devriez envisager de déplacer le texte de la «réponse» à votre question initiale et supprimer le message de réponse. Ou, pour faciliter la discussion, postez toute cette question sous forme de problème sur Github, [ici] (https://github.com/cureos/aforge/issues?state=open). –

+0

Ok @AndersGustafsson J'ai écrit ce problème sur github. J'essaie de résoudre et d'attendre aide. THX. –

+0

Problème est résolu.J'ai défini certaines fonctions position incorrecte:/c'est mon erreur. Donc désolé @AnderGustafsson. Alors merci tout. –

Questions connexes