2015-01-12 81 views
2

我正在爲水位預測創建一個網絡。我使用的是Windows的NeuroPh 2.91。我將網絡設置爲3個輸入,因爲它接受3個輸入,即水位,降雨量和流入量。我使用多層感知器,tanh作爲傳遞函數和反向傳播作爲9個隱藏神經元的學習規則。NeuroPh錯誤不會消失

我總是具有這樣的輸出:根據圖表

Starting neural network training... 
Training network try using data set adminshet 
Training error: null 

,總網絡錯誤是20000。 我該怎麼辦?我對ANN和Neuroph真的很陌生。

+0

這似乎不是一個編程問題,但更多的是如何使用現有程序「NeuroPh」的問題。 – MSalters

+0

是的,但是如果你沒有1500的聲望,就沒有辦法添加NeuroPH標籤,這就是爲什麼@ jalusa無法添加它,並且我添加了netbeans,它是neuroph背後的IDE。 – mCeviker

回答

1

我在這裏有同樣的問題。類似的設置。它適用於我,當我強烈限制最大迭代。例如至10. 這讓我想到,NeurophStudio中存在一個錯誤。

短提示,這對我有效: 自己動手!打開Eclipse,添加一個項目,添加Neuroph罐並構建您的網絡。它很難,但是它的工作方式與預期完全相同。您必須將自己的結果轉儲到csv文件並使用Excel進行顯示。但人工智能處理不僅僅是「點擊一個gui」。

package de.sauer.dispe; 

import org.neuroph.core.Layer; 
import org.neuroph.core.NeuralNetwork; 
import org.neuroph.core.Neuron; 
import org.neuroph.core.data.DataSet; 
import org.neuroph.core.transfer.Linear; 
import org.neuroph.core.transfer.Tanh; 
import org.neuroph.nnet.MultiLayerPerceptron; 
import org.neuroph.nnet.learning.BackPropagation; 

public class DirSpeCntrl { 

    private static final int MAX_ITER = 2000; 
    private static final double MAX_ERROR = 0.005; 
    private static final double LEARNING_RATE = 0.1; 

    public static void main(String[] args) { 
     System.out.println("Create ANN"); 
     NeuralNetwork<BackPropagation> nn = new MultiLayerPerceptron(3, 15, 15, 1); 

     // Setting ALL neurons to TanH transferfunction (important, if you have negativ values) 
     Layer[] layers = nn.getLayers(); 
     for(Layer curLayer: layers) { 
      for(Neuron curNeuron: curLayer.getNeurons()) { 
       curNeuron.setTransferFunction(new Tanh()); 
      } 
     } 

     for(Neuron curNeuron: layers[3].getNeurons()) { 
      curNeuron.setTransferFunction(new Linear()); 
     } 

     nn.randomizeWeights(); 

     System.out.println("Load Sampledata..."); 
     DataSet ds = DataSet.createFromFile(
       "C:\\Users\\meist_000\\Documents\\Thesis\\vanilla_eng.csv", 
       3, 1, ";"); 

     System.out.println("done: "+ds.getRows().size()+". Learn..."); 

     // Setting stuff 
     BackPropagation lr = new BackPropagation(); 
     lr.setLearningRate(LEARNING_RATE); 
     lr.setMaxIterations(MAX_ITER); 
     lr.setTrainingSet(ds); 
     lr.setNeuralNetwork(nn); 
     nn.setLearningRule(lr); 

//  bla.learn(ds); Faster bulk operation... 

     // Slower single operation with logging: 
     for(int i=0;i<MAX_ITER;i++) { 
      lr.doLearningEpoch(ds); 
      double curError = lr.getTotalNetworkError(); 
      System.out.println(curError); 

      if(curError < MAX_ERROR) { 
       System.out.println("Stopped on "+i); 
       break; 
      } 
     } 

     // Testing the network 
     nn.setInput(new double[] {0.080484492, -0.138512128, -0.140826873}); 
     nn.calculate(); 
     double[] prediction = nn.getOutput(); 
     System.out.println("Pred: "+prediction[0]); 
    } 

}