Künstlich neuronale Netzwerke in Java

By Vincent No comments

Mit meiner Facharbeit über künstlich neuronale Netzwerke ist auch einiges an Code entstanden. Hier also das nützlichste daraus.

Um ein neuronales Netzwerk abzubilden ist eine Klasse NeuralNetwork entstanden. Diese enthält alle Methoden um ein klassisches neuronales Netzwerk zu verwenden. Als Lernverfahren wird der Backproagation-Algorithmus verwendet, also alles supervised learning!

Um eine neue Instanz der NeuralNetwork Klasse zu erstellen, werden im Konstruktor die Daten für die Größe des Netzes und die Lernrate angegeben. Der erste Parameter ist die Anzahl an Input-Nodes, danach kommt ein Array mit den verschiedenen Hidden-Nodes. Ein Element in diesem Array bildet ein Hidden-Layer ab. Der dritte Parameter ist die Anzahl an Output-Nodes und der letzte Parameter ist die Lernrate.

int[] hidden = { 10 };
NeuralNetwork nn = new NeuralNetwork(2, hidden, 1, 0.1);

Als Beispiel für hier lassen wir das Netzwerk das XOR-Problem lösen. Somit sehen unsere Daten dafür so aus:

double[][] input = { { 0, 0 }, { 0, 1 }, { 1, 0 }, { 1, 1 } };
double[][] target = { { 0 }, { 1 }, { 1 }, { 0 } };

Um nun das Netzwerk zu trainieren erstellen wir eine Schleife, wie oft wir trainieren wollen (1000 mal) und darin eine Schleife, welche alle Kombinationen (4 Kombinationen) durchgeht. Dies sieht somit wie folgt aus:

for(int i = 0; i < 1000; i++) {
	for(int j = 0; j < 4; j++) {
		nn.train(input[j], target[j]);
	}
}

Zum Schluss können wir das Netzwerk befragen, um zu überprüfen, ob es auch richtig gelernt hat:

double[] output = nn.getGuess(input[0]);
System.out.println(output[0]);

Hier noch das Github-Repo: https://github.com/vincenteichhorn/neuralnetworks

Schreibe einen Kommentar