Start · Sprachen · PHP · Referenz · fann_cascadetrain_on_data

fann_cascadetrain_on_data

Funktion

Trainiert ein neuronales Netz mit dem Cascade2-Algorithmus auf einem vollständigen FANN-Datensatz für eine bestimmte Anzahl von Neuronen.

seit PHP 5.2.0 Kategorie: misc

Signatur

fann_cascadetrain_on_data(resource $ann, resource $data, int $max_neurons, int $neurons_between_reports, float $desired_error): bool

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

Typ
bool
Beschreibung
Gibt 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 erfolgreich abgeschlossen.

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);
}
Erreichter MSE nach dem Training: 0.000423

// 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.