Künstliche Intelligenz mit Java
Maschinelles Lernen mit Neuronalen Netzwerken

Auch die Implementierung des Forward-Pass ist selbsterklärend und clean:

  public void calculateOutput(double[] input) {
    setInputLayer(input);
    calculateOutputFromHiddenLayer(input);
    calculateOutputFromOutputLayer();
  }

  private void setInputLayer (double[] inputLayer) {
    this.inputLayer = inputLayer;
  }

  private void calculateOutputFromHiddenLayer(double[] inputOfInputLayer) {
    for (int i = 0; i < hiddenLayer.size(); i++)
      ProcessMonitoring.lastOutputsFromHiddenLayer[i] = hiddenLayer.get(i).getOutput(
        inputOfInputLayer, 
TrainingParameter.activationFunction);
  }

  private void calculateOutputFromOutputLayer() {
    for (int i = 0; i < outputLayer.size(); i++)
      ProcessMonitoring.lastOutputs[i] = outputLayer.get(i).getOutput(
        ProcessMonitoring.lastOutputsFromHiddenLayer, TrainingParameter.activationFunction);
  }

  // nach dem nächsten Satz geht die Klasse FeedForwardNetwork weiter


Das reine Training ist algorithmisch auch sehr verständlich:

  public void trainWithSupervisedLearning() {
    for (int epoche = 1; epoche <= TrainingParameter.numberOfEpochs; epoche++) {
      int sample = new Random().nextInt(TrainingParameter.inputs.length);
      calculateOutput(TrainingParameter.inputs[sample]);
      makeBackPropagationForOutputLayer(TrainingParameter.targets[sample]);
      makeBackPropagationForHiddenLayer(TrainingParameter.inputs[sample],
                                        TrainingParameter.targets[sample]);
    }
  }

  // auf der nächsten Seite geht die Klasse FeedForwardNetwork weiter  


- 43 -