Wie werden aber die beiden Neuronen-Schichten genau erzeugt? Ganz einfach:
private void builtHiddenLayer(int numberOfLayerInputSignals,
int numberOfNeuronsInHiddenLayer) {
hiddenLayer = new ArrayList<Neuron>();
double bias = 2 * new Random().nextDouble() - 1;
for (int i = 0; i < numberOfNeuronsInHiddenLayer; i++)
hiddenLayer.add(new Neuron(numberOfLayerInputSignals, outputLayer, bias));
}
private void builtOutputLayer(int numberOfLayerInputSignals,
int numberOfNeuronsInOutputLayer) {
outputLayer = new ArrayList<Neuron>();
double bias = 2 * new Random().nextDouble() - 1;
for (int i = 0; i < numberOfNeuronsInOutputLayer; i++)
outputLayer.add(new Neuron(numberOfLayerInputSignals, null, bias));
}
Die zufälligen Gewichte der einzelnen Neuronen liegen zwischen -1 und +1.
Jetzt werden für die Gewichte des Hidden-Layers und des Output-Layers Verwaltungsmethoden (setter/getter) zur Verfügung gestellt:
public void setWeightsOfHiddenLayer() {
for (int i = 0; i < hiddenLayer.size(); i++)
for (int j = 0; j < inputLayer.length + 1; j++) // + 1 (bias)
hiddenLayer.get(i).setWeights(j, TrainingParameter.weightsOfHiddenLayer[i][j]);
}
public double[][] getWeightsOfHiddenLayer() {
double[][] weightsOfHiddenLayer =
new double[hiddenLayer.size()][hiddenLayer.size() + 1]; // + 1 (bias)
for (int i = 0; i < hiddenLayer.size(); i++)
for (int j = 0; j < inputLayer.length + 1; j++) // + 1 (bias)
weightsOfHiddenLayer[i][j] = hiddenLayer.get(i).getWeights()[j];
return weightsOfHiddenLayer;
}
public void setWeightsOfOutputLayer() {
for (int i = 0; i < outputLayer.size(); i++)
for (int j = 0; j < hiddenLayer.size() + 1; j++) // + 1 (bias)
outputLayer.get(i).setWeights(j, TrainingParameter.weightsOfOutputLayer[i][j]);
}
public double[][] getWeightsOfOutputLayer() {
double[][] weightsOfOutputLayer =
new double[outputLayer.size()][hiddenLayer.size() + 1]; // + 1 (bias)
for (int i = 0; i < outputLayer.size(); i++)
for (int j = 0; j < hiddenLayer.size() + 1; j++) // + 1 (bias)
weightsOfOutputLayer[i][j] = outputLayer.get(i).getWeights()[j];
return weightsOfOutputLayer;
}
// auf der nächsten Seite geht die Klasse FeedForwardNetwork weiter
Die 4 Methoden sind selbsterklärend.
- 42 -