Signatur
Beschreibung
fann_train_epoch führt einen vollständigen Trainings-Durchlauf (eine Epoche) über alle im $data-Ressourceobjekt enthaltenen Trainingsbeispiele durch. Nach jedem Beispiel werden die Gewichte des Netzes angepasst, sodass der Fehler schrittweise minimiert wird.
Die Funktion ist Teil der FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP und eignet sich besonders dann, wenn der Trainingsprozess manuell gesteuert werden soll – etwa um nach jeder Epoche eigene Abbruchkriterien zu prüfen, Protokolle zu schreiben oder den Fortschritt anzuzeigen. Für einfaches Durchtrainieren bis zu einem Ziel-MSE kann alternativ fann_train_on_data verwendet werden.
Der Rückgabewert ist der mittlere quadratische Fehler (Mean Squared Error, MSE) des Netzes nach der Epoche. Ein kleinerer Wert bedeutet, dass das Netz die Trainingsdaten besser approximiert. Mit fann_get_MSE kann der letzte MSE auch nachträglich abgerufen werden.
Typisches Anwendungsmuster ist eine Schleife, die fann_train_epoch so lange aufruft, bis der MSE einen vordefinierten Schwellenwert unterschreitet oder eine maximale Epochenzahl erreicht ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine gültige FANN-Netz-Ressource, die zuvor mit fann_create_standard oder einer ähnlichen Funktion erstellt wurde. |
|
| $data Pflicht | resource | Eine FANN-Trainingsdaten-Ressource, die mit fann_read_train_from_file oder fann_create_train_from_callback geladen wurde. |
Rückgabewert
float zurück, nachdem alle Trainingsbeispiele der Epoche verarbeitet wurden. Bei einem Fehler (z. B. ungültige Ressourcen) wird false zurückgegeben.Beispiele
Manuell gesteuerte Trainingsschleife mit Epochen-Protokoll
<?php
// Netz erstellen: 2 Eingaben, 1 versteckte Schicht mit 3 Neuronen, 1 Ausgabe
$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);
// Trainingsdaten laden (z. B. XOR-Problem)
$data = fann_read_train_from_file('xor.data');
$maxEpochs = 1000;
$targetMse = 0.001;
for ($epoch = 1; $epoch <= $maxEpochs; $epoch++) {
$mse = fann_train_epoch($ann, $data);
if ($epoch % 100 === 0) {
echo "Epoche {$epoch}: MSE = {$mse}\n";
}
if ($mse <= $targetMse) {
echo "Ziel-MSE {$targetMse} nach {$epoch} Epochen erreicht.\n";
break;
}
}
// Trainiertes Netz speichern
fann_save($ann, 'xor_trained.net');
fann_destroy_train($data);
fann_destroy($ann);
Trainingsfortschritt mit Callback vergleichen
<?php
$ann = fann_create_standard(3, 2, 4, 1);
$data = fann_read_train_from_file('sine.data');
$history = [];
for ($i = 0; $i < 500; $i++) {
$mse = fann_train_epoch($ann, $data);
if ($mse === false) {
echo "Fehler beim Training in Epoche {$i}\n";
break;
}
$history[] = round($mse, 6);
}
// Letzten und ersten MSE vergleichen
echo 'Start-MSE : ' . $history[0] . "\n";
echo 'End-MSE : ' . end($history) . "\n";
fann_destroy_train($data);
fann_destroy($ann);
// Wichtig · Fallstricke
Voraussetzung: Die FANN-Erweiterung (ext-fann) muss kompiliert und in der php.ini aktiviert sein. Sie ist nicht Teil der PHP-Standardinstallation und muss über PECL installiert werden.
Lernalgorithmus: Welcher Backpropagation-Algorithmus (Standard-Backprop, RPROP, Quickprop usw.) verwendet wird, hängt von der mit fann_set_training_algorithm gesetzten Konfiguration ab. Das beeinflusst das Konvergenzverhalten erheblich.
Ressourcen-Verwaltung: Sowohl $ann als auch $data müssen gültige, nicht freigegebene Ressourcen sein. Nach Abschluss des Trainings sollten beide mit fann_destroy bzw. fann_destroy_train freigegeben werden, um Speicherlecks zu vermeiden.