Ejemplo n.º 1
0
  public void trainNetwork(
      ArrayList<ArrayList<Double>> input, ArrayList<ArrayList<Double>> output) {
    if (w1 == null && w2 == null) {
      // The +1 refers to the bias
      w1 = initializeWeights(input.get(0).size() + 1, hiddenLNo, w1);
      w2 = initializeWeights(hiddenLNo + 1, outputLNo, w2);
    }

    for (int i = 0; i < input.size(); i++) {
      Double[] tempOutput = new Double[output.get(i).size()];
      tempOutput = output.get(i).toArray(tempOutput);
      MinMax(tempOutput);
    }

    Double[][] tempInput = new Double[input.size()][input.get(0).size()];
    Double[][] tempOutput = new Double[output.size()][output.get(0).size()];
    for (int i = 0; i < input.size(); i++) {
      tempInput[i] = input.get(i).toArray(tempInput[i]);
      tempOutput[i] = output.get(i).toArray(tempOutput[i]);
    }

    for (int j = 0; j < 300; j++) {
      for (int i = 0; i < input.size(); i++) {
        train(tempInput[i], scale(tempOutput[i], 0.0, 1.0, Dmin, Dmax));
        // train(tempInput, tempOutput);
      }

      // if(lastTrainedWeights.size()==50 &&
      // !(isLearning(w1,input.get(0).size() + 1,hiddenLNo) ||
      // isLearning(w2,hiddenLNo + 1,outputLNo))){
      // System.out.println(j);
      // break;
      // }

      if (lastTrainedWeights.size() == 10) {
        lastTrainedWeights.remove();
      }
      ArrayList<Double[][]> temp = new ArrayList<Double[][]>();
      temp.add(w1);
      temp.add(w2);
      lastTrainedWeights.add(temp);
    }
  }