Signatur
Beschreibung
fann_train führt eine einzelne Trainingsiteration auf einem neuronalen Netz durch. Dabei wird dem Netz ein Eingabe-Vektor präsentiert, die Ausgabe wird berechnet und anschließend der Fehler gegenüber dem gewünschten Ausgabe-Vektor ermittelt. Das Netz passt seine Gewichte entsprechend dem konfigurierten Trainingsalgorithmus an.
Diese Funktion ist besonders nützlich, wenn du das Training manuell steuern möchtest, zum Beispiel um eigene Abbruchbedingungen, Logging oder adaptives Lernen zu implementieren. Im Gegensatz zu fann_train_on_data wird nur ein einzelner Datensatz pro Aufruf verarbeitet, sodass du die vollständige Kontrolle über den Trainingsablauf behältst.
Die Funktion setzt voraus, dass das neuronale Netz zuvor mit fann_create_standard oder einer ähnlichen Erstell-Funktion erzeugt wurde. Der Trainingsalgorithmus sowie die Lernrate können mit fann_set_training_algorithm und fann_set_learning_rate konfiguriert werden.
Typischerweise wird fann_train in einer Schleife über alle Trainingsbeispiele aufgerufen, um eine vollständige Trainingsepoche zu realisieren. Nach dem Training kann das trainierte Netz mit fann_save gespeichert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine gültige FANN-Ressource, die mit einer der fann_create_*-Funktionen erzeugt wurde. |
|
| $input Pflicht | array | Ein Array von Eingabewerten (Floats), das dem neuronalen Netz als Eingabe präsentiert wird. Die Anzahl der Elemente muss der Anzahl der Eingabe-Neuronen des Netzes entsprechen. | |
| $desired_output Pflicht | array | Ein Array von gewünschten Ausgabewerten (Floats), gegen die das Netz trainiert wird. Die Anzahl der Elemente muss der Anzahl der Ausgabe-Neuronen des Netzes entsprechen. |
Rückgabewert
true zurück, wenn das Training der Iteration erfolgreich war, andernfalls false (z. B. bei einer ungültigen Ressource oder falsch dimensionierten Arrays).Beispiele
Manuelles Training eines XOR-Netzes
<?php
// Netz erstellen: 2 Eingänge, 1 versteckte Schicht mit 3 Neuronen, 1 Ausgang
$ann = fann_create_standard(3, 2, 3, 1);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_learning_rate($ann, 0.7);
// XOR-Trainingsdaten
$training_data = [
[[0.0, 0.0], [0.0]],
[[0.0, 1.0], [1.0]],
[[1.0, 0.0], [1.0]],
[[1.0, 1.0], [0.0]],
];
// 10.000 Epochen trainieren
for ($epoch = 0; $epoch < 10000; $epoch++) {
foreach ($training_data as [$input, $desired_output]) {
fann_train($ann, $input, $desired_output);
}
}
// Testen
foreach ($training_data as [$input, $desired_output]) {
$output = fann_run($ann, $input);
printf("Input: [%s] => Ausgabe: %.4f (Soll: %.1f)\n",
implode(', ', $input), $output[0], $desired_output[0]);
}
fann_destroy($ann);
Training mit Fehlerüberwachung und Abbruchbedingung
<?php
$ann = fann_create_standard(3, 2, 4, 1);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_learning_rate($ann, 0.5);
$data = [
[[0.0, 0.0], [0.0]],
[[0.0, 1.0], [1.0]],
[[1.0, 0.0], [1.0]],
[[1.0, 1.0], [0.0]],
];
$max_epochs = 50000;
$target_mse = 0.001;
for ($epoch = 1; $epoch <= $max_epochs; $epoch++) {
foreach ($data as [$input, $output]) {
fann_train($ann, $input, $output);
}
$mse = fann_get_MSE($ann);
if ($epoch % 5000 === 0) {
echo "Epoche {$epoch}: MSE = {$mse}\n";
}
if ($mse < $target_mse) {
echo "Ziel-MSE erreicht nach {$epoch} Epochen.\n";
break;
}
}
fann_save($ann, '/tmp/xor.net');
fann_destroy($ann);
// Wichtig · Fallstricke
Erweiterung erforderlich: fann_train ist Teil der FANN-Erweiterung (Fast Artificial Neural Network Library). Diese muss separat installiert und in der php.ini aktiviert werden.
Dimensionen beachten: Die Arrays input und desired_output müssen exakt die richtige Anzahl an Elementen aufweisen, die der Netzkonfiguration entspricht. Falsch dimensionierte Arrays führen zu Trainingsfehlern oder undefiniertem Verhalten.
Performance: Für großes Trainings-Datenmengen ist fann_train_on_data oder fann_train_on_file effizienter, da diese Funktionen intern optimiert sind. fann_train eignet sich vor allem für benutzerdefinierte Trainingsschleifen mit Sonderbedingungen.