Signatur
Beschreibung
fann_cascadetrain_on_data() ist Teil der FANN-Erweiterung (Fast Artificial Neural Network) und führt ein Cascade2-Korrelationstraining auf einem zuvor geladenen Datensatz durch. Im Gegensatz zum Standard-Backpropagation-Training fügt der Cascade2-Algorithmus schrittweise neue Neuronen zur verdeckten Schicht hinzu, bis entweder der gewünschte Fehler erreicht wird oder die maximale Neuronenanzahl überschritten ist.
Der Algorithmus eignet sich besonders für Aufgaben, bei denen die ideale Netzgröße nicht im Voraus bekannt ist, da er das Netz dynamisch aufbaut. Das übergebene $ann-Ressource-Handle muss mit fann_create_shortcut() erstellt worden sein, da der Cascade2-Algorithmus Shortcut-Verbindungen voraussetzt.
Mit dem Parameter $neurons_between_reports kann gesteuert werden, wie oft Zwischenberichte über den Trainingsfortschritt ausgegeben werden. Ein Wert von 0 unterdrückt alle Zwischenberichte. Der Trainingsvorgang stoppt automatisch, sobald der $desired_error unterschritten oder $max_neurons erreicht wird.
Diese Funktion erfordert die PHP-FANN-Erweiterung (ext-fann), die separat installiert werden muss. Sie steht nicht in der PHP-Standardinstallation zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Ein gültiges FANN-Netz-Handle, das mit fann_create_shortcut() oder fann_create_shortcut_array() erzeugt wurde. |
|
| $data Pflicht | resource | Ein gültiges FANN-Trainings-Datensatz-Handle, z. B. erzeugt mit fann_read_train_from_file(). |
|
| $max_neurons Pflicht | int | Die maximale Anzahl von Neuronen, die dem Netz während des Trainings hinzugefügt werden dürfen. Das Training stoppt spätestens nach Erreichen dieser Zahl. | |
| $neurons_between_reports Pflicht | int | Gibt an, nach wie vielen hinzugefügten Neuronen ein Zwischenbericht ausgegeben wird. Bei 0 werden keine Berichte ausgegeben. |
|
| $desired_error Pflicht | float | Der gewünschte maximale Fehler (MSE oder Bit-Fehler, abhängig von der Fehlerfunktion). Das Training stoppt, sobald dieser Wert unterschritten wird. |
Rückgabewert
true zurück, wenn das Training erfolgreich abgeschlossen wurde, andernfalls false bei einem Fehler (z. B. ungültiges Handle oder falsche Netzarchitektur).Beispiele
Cascade2-Training auf einem FANN-Datensatz
<?php
// Shortcut-Netz erstellen (zwingend für Cascade2)
$ann = fann_create_shortcut(2, 1);
if (!$ann) {
die('Fehler beim Erstellen des Netzes.');
}
// Trainingsdaten laden
$train_data = fann_read_train_from_file('xor.data');
if (!$train_data) {
die('Fehler beim Laden der Trainingsdaten.');
}
$max_neurons = 30; // Maximal 30 Neuronen hinzufügen
$neurons_per_report = 1; // Bericht nach jedem neuen Neuron
$desired_error = 0.001; // Ziel-Fehlerrate
$result = fann_cascadetrain_on_data(
$ann,
$train_data,
$max_neurons,
$neurons_per_report,
$desired_error
);
if ($result) {
echo 'Training erfolgreich abgeschlossen.' . PHP_EOL;
fann_save($ann, 'xor_cascade.net');
} else {
echo 'Fehler beim Training.' . PHP_EOL;
}
fann_destroy_train($train_data);
fann_destroy($ann);
Training mit Fehlerausgabe und Überprüfung des MSE
<?php
$ann = fann_create_shortcut(2, 1);
$train_data = fann_read_train_from_file('xor.data');
if ($ann && $train_data) {
// Fehlerfunktion auf MSE setzen
fann_set_train_error_function($ann, FANN_ERRORFUNC_LINEAR);
fann_cascadetrain_on_data($ann, $train_data, 50, 5, 0.0005);
$mse = fann_get_MSE($ann);
printf('Erreichter MSE nach dem Training: %.6f' . PHP_EOL, $mse);
fann_destroy_train($train_data);
fann_destroy($ann);
}
// Wichtig · Fallstricke
Wichtig: Das neuronale Netz muss mit fann_create_shortcut() oder fann_create_shortcut_array() erstellt werden. Netze, die mit fann_create_standard() erstellt wurden, sind mit dem Cascade2-Algorithmus nicht kompatibel und führen zu einem Fehler.
Die FANN-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL (pecl install fann) oder manuell kompiliert werden. Ab PHP 8.0 kann die Unterstützung je nach Distribution eingeschränkt sein — prüfe die Verfügbarkeit mit extension_loaded('fann').
Für sehr große Datensätze bietet sich alternativ fann_cascadetrain_on_file() an, das direkt aus einer Datei liest, ohne den gesamten Datensatz im Speicher halten zu müssen.