Signatur
Beschreibung
fann_train_on_file liest einen vollständigen Trainingsdatensatz aus einer Datei im FANN-Format und trainiert damit das angegebene neuronale Netz über eine festgelegte maximale Anzahl von Epochen. Die Funktion ist Teil der FANN-Erweiterung (Fast Artificial Neural Network) für PHP.
Das Training wird automatisch beendet, wenn entweder die maximale Epochenanzahl (max_epochs) erreicht wurde oder der mittlere quadratische Fehler (MSE) unter den gewünschten Fehler (desired_error) fällt. Mit dem Parameter epochs_between_reports kann gesteuert werden, wie häufig Fortschrittsberichte ausgegeben werden – ein Wert von 0 deaktiviert die Ausgabe.
Die Trainingsdatei muss im FANN-eigenen Format vorliegen: Die erste Zeile enthält die Anzahl der Trainingsbeispiele, die Anzahl der Eingaben und die Anzahl der Ausgaben. Danach folgen abwechselnd Eingabe- und Ausgabevektoren. Diese Funktion eignet sich besonders für wiederkehrendes oder automatisiertes Training, bei dem der Datensatz persistent gespeichert werden soll.
Nach erfolgreichem Training kann das Netz mit fann_save gespeichert und später mit fann_create_from_file wiederverwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine FANN-Netzwerk-Ressource, wie sie von fann_create_standard oder ähnlichen Funktionen zurückgegeben wird. |
|
| $filename Pflicht | string | Pfad zur FANN-Trainingsdatei, die die Trainingsbeispiele (Eingaben und erwartete Ausgaben) im FANN-Format enthält. | |
| $max_epochs Pflicht | int | Die maximale Anzahl von Trainingsepochen. Das Training endet spätestens nach dieser Anzahl von Durchläufen. | |
| $epochs_between_reports Pflicht | int | Anzahl der Epochen zwischen zwei Fortschrittsberichten. Ein Wert von 0 deaktiviert die Berichtausgabe vollständig. |
|
| $desired_error Pflicht | float | Der gewünschte maximale mittlere quadratische Fehler (MSE). Das Training wird vorzeitig beendet, sobald dieser Wert unterschritten wird. |
Rückgabewert
true zurück, wenn das Training erfolgreich abgeschlossen wurde, andernfalls false (z. B. wenn die Datei nicht gelesen werden konnte oder die Netzwerk-Ressource ungültig ist).Beispiele
Neuronales Netz mit FANN-Datei trainieren
<?php
// Netz mit 2 Eingabe-, 3 versteckten und 1 Ausgabeneuron erstellen
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann) {
// Lernrate setzen
fann_set_learning_rate($ann, 0.7);
// Training mit Datensatz aus Datei
$trainingFile = '/pfad/zu/xor.data';
$maxEpochs = 500000;
$epochsBetweenReports = 1000;
$desiredError = 0.001;
if (fann_train_on_file($ann, $trainingFile, $maxEpochs, $epochsBetweenReports, $desiredError)) {
echo "Training erfolgreich abgeschlossen.\n";
echo "MSE: " . fann_get_MSE($ann) . "\n";
// Trainiertes Netz speichern
fann_save($ann, '/pfad/zu/xor_trained.net');
} else {
echo "Fehler beim Training.\n";
}
fann_destroy($ann);
} else {
echo "Fehler beim Erstellen des Netzes.\n";
}
?>
XOR-Trainingsdatei und anschließendes Training
<?php
// Beispiel einer typischen FANN-Trainingsdatei für XOR:
// 4 2 1
// -1 -1
// -1
// -1 1
// 1
// 1 -1
// 1
// 1 1
// -1
$trainingFile = 'xor.data';
// Trainingsdatei programmatisch erstellen
$data = "4 2 1\n-1 -1\n-1\n-1 1\n1\n1 -1\n1\n1 1\n-1\n";
file_put_contents($trainingFile, $data);
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann) {
// Ohne Berichte (0 = kein Report)
$result = fann_train_on_file($ann, $trainingFile, 300000, 0, 0.001);
if ($result) {
echo "Training beendet. Fehler: " . fann_get_MSE($ann) . "\n";
}
fann_destroy($ann);
}
unlink($trainingFile);
?>
// Wichtig · Fallstricke
FANN-Erweiterung erforderlich: Die Funktion steht nur zur Verfügung, wenn PHP mit der FANN-Erweiterung kompiliert wurde (--with-fann). Diese ist seit PHP 8.0 nicht mehr standardmäßig enthalten und muss ggf. über PECL installiert werden.
Dateiformat: Die Trainingsdatei muss exakt dem FANN-Format entsprechen. Fehler im Format führen zum Abbruch und Rückgabe von false. Die erste Zeile muss Anzahl_Beispiele Anzahl_Eingaben Anzahl_Ausgaben enthalten.
Performance: Bei sehr großen Datensätzen kann es sinnvoll sein, epochs_between_reports auf 0 zu setzen, um die I/O-Last durch Berichtausgaben zu minimieren. Alternativ kann mit fann_train_on_data ein bereits geladener Datensatz wiederverwendet werden, um das wiederholte Einlesen der Datei zu vermeiden.