2014-05-19 77 views
1

我想在Windows Phone 8應用程序上使用aforge(神經網絡)框架編寫,並且我安裝了PCL版本hereWindows Phone 8.0上的神經網絡

我寫了下面的代碼:

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)); 

我的桌面應用程序嘗試相同的代碼和我得到計算爲0.00112 ..或0.01283 ...,0.02123 ..,0.03231 ..,0.04159 ...所以如果我四捨五入到一個數字0,1,2,3,4 ...

但是,當我嘗試在Windows Phone 8項目上,我得到計算像0.9999995345一樣。

我的問題是什麼。

在此先感謝。 (對不起,我的語言。)

+0

什麼類型是網絡變量,以及你是如何初始化的? –

+0

我使用了[先前的問題](http://stackoverflow.com/q/23717779/650012)的初始化,只是我將輸入計數從9更改爲4.調用'Compute',我的值接近1無論何時我在Windows Phone上嘗試此操作(使用* Cureos *二進制文件),或者如果我使用NuGet程序集在控制檯應用程序中嘗試它。您能否展示桌面應用程序代碼,以獲得您期望的結果? –

回答

0

桌面代碼:

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"; 
     } 

列車集here

@Anders古斯塔夫森,這個代碼在桌面上工作。如果我輸入5.1,3.5,1.4,0.2的雙數,我給出的輸出是1.

+0

奧斯曼,當我有時間時,我會更詳細地研究這一點。同時,我認爲你應該考慮將文本從「答案」移動到原始問題,並刪除答案文章。或者,爲了便於進一步討論,請在Github上發佈整個問題,在這裏(https://github.com/cureos/aforge/issues?state=open)。 –

+0

Ok @AndersGustafsson我在github上寫了這個問題。我正在努力解決和等待幫助。謝謝。 –

+0

問題解決了。我定義了一些函數不正確的位置:/這是我的錯誤。非常抱歉@AnderGustafsson。所以謝謝一切。 –