Start · Sprachen · PHP · Referenz · fann_set_callback

fann_set_callback

Funktion

Setzt eine Callback-Funktion, die während des Trainings eines neuronalen Netzes periodisch aufgerufen wird.

seit PHP 5.4.0 Kategorie: misc

Signatur

fann_set_callback(resource $ann, callable $callback): bool

Beschreibung

fann_set_callback registriert eine benutzerdefinierte Callback-Funktion für ein FANN-Netzwerk (Fast Artificial Neural Network). Diese Funktion wird während des Trainingsprozesses in regelmäßigen Abständen aufgerufen und ermöglicht es, den Trainingsfortschritt zu überwachen, abzubrechen oder zu protokollieren.

Die Callback-Funktion wird mit folgender Signatur aufgerufen: callback(resource $ann, resource $train, int $max_epochs, int $epochs_between_reports, float $desired_error, int $epochs): int. Gibt die Callback-Funktion -1 zurück, wird das Training vorzeitig abgebrochen; gibt sie 0 zurück, wird das Training normal fortgesetzt.

Typische Einsatzszenarien sind das Anzeigen von Fortschrittsbalken, das Protokollieren von Fehlermetriken in eine Datei oder Datenbank, das dynamische Anpassen von Lernparametern sowie das Implementieren von Early-Stopping-Strategien, bei denen das Training abgebrochen wird, sobald ein bestimmtes Fehlermaß erreicht ist.

Diese Funktion ist Teil der FANN-Erweiterung für PHP und erfordert, dass die fann-Extension installiert und aktiviert ist. Sie arbeitet eng mit Funktionen wie fann_train_on_data oder fann_train_on_file zusammen.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netzwerk-Ressource, die zuvor mit z. B. fann_create_standard oder fann_create_from_file erzeugt wurde.
$callback Pflicht callable Eine aufrufbare PHP-Funktion, die während des Trainings periodisch aufgerufen wird. Die Funktion erhält die Parameter $ann, $train, $max_epochs, $epochs_between_reports, $desired_error und $epochs. Sie muss 0 (Training fortsetzen) oder -1 (Training abbrechen) zurückgeben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Callback-Funktion erfolgreich gesetzt wurde, oder false im Fehlerfall (z. B. wenn die übergebene Ressource ungültig ist).

Beispiele

Fortschritt während des Trainings protokollieren

<?php
// Neuronales 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);

// Callback-Funktion definieren
function training_callback($ann, $train, $max_epochs, $epochs_between_reports, $desired_error, $epochs)
{
    $current_error = fann_get_MSE($ann);
    echo "Epoche {$epochs}/{$max_epochs} — MSE: {$current_error}\n";

    // Training abbrechen, wenn Fehler klein genug
    if ($current_error < 0.001) {
        echo "Frühzeitiger Abbruch: Gewünschter Fehler erreicht.\n";
        return -1;
    }

    return 0;
}

// Callback registrieren
if (fann_set_callback($ann, 'training_callback')) {
    echo "Callback erfolgreich gesetzt.\n";
} else {
    echo "Fehler beim Setzen des Callbacks.\n";
}

// Training starten (Trainingsdatei muss vorhanden sein)
// fann_train_on_file($ann, 'training_data.data', 1000, 10, 0.001);

fann_destroy($ann);
?>
Callback erfolgreich gesetzt.

Callback als anonyme Funktion mit Early Stopping

<?php
$ann = fann_create_standard(3, 2, 4, 1);
fann_set_activation_function_hidden($ann, FANN_RELU);
fann_set_activation_function_output($ann, FANN_SIGMOID);

$log = [];

// Anonyme Callback-Funktion mit Zugriff auf $log via use
fann_set_callback($ann, function($ann, $train, $max_epochs, $epochs_between_reports, $desired_error, $epochs) use (&$log) {
    $mse = fann_get_MSE($ann);
    $log[] = ['epoch' => $epochs, 'mse' => $mse];

    // Abbruch nach 500 Epochen oder bei sehr niedrigem Fehler
    if ($epochs >= 500 || $mse < 0.0001) {
        return -1;
    }

    return 0;
});

// Training würde hier gestartet:
// fann_train_on_file($ann, 'xor.data', 1000, 50, 0.001);

// Protokoll auswerten
foreach (array_slice($log, 0, 3) as $entry) {
    echo "Epoche {$entry['epoch']}: MSE = {$entry['mse']}\n";
}

fann_destroy($ann);
?>

// Wichtig · Fallstricke

Erweiterung erforderlich: Die FANN-Extension für PHP muss installiert sein (pecl install fann). Ohne diese Extension ist fann_set_callback nicht verfügbar.

Rückgabewert der Callback-Funktion: Wenn die Callback-Funktion einen anderen Wert als 0 oder -1 zurückgibt, kann das Verhalten undefiniert sein. Achten Sie stets darauf, explizit 0 oder -1 zurückzugeben.

Performance: Eine zu aufwändige Callback-Funktion kann den Trainingsprozess erheblich verlangsamen. Komplexe Berechnungen innerhalb des Callbacks sollten vermieden oder zumindest auf bestimmte Epochen beschränkt werden, indem der Parameter $epochs_between_reports bei fann_train_on_file bzw. fann_train_on_data erhöht wird.