Start · Sprachen · PHP · Referenz · fann_train_on_data

fann_train_on_data

Funktion

Trainiert ein neuronales Netz auf einem vollständigen Datensatz für eine definierte Anzahl von Epochen oder bis der gewünschte Fehler erreicht ist.

seit PHP 5.6.0 Kategorie: misc

Signatur

fann_train_on_data(resource $ann, resource $data, int $max_epochs, int $epochs_between_reports, float $desired_error): bool

Beschreibung

fann_train_on_data führt das Training eines FANN-Netzwerks (Fast Artificial Neural Network) auf einem zuvor geladenen oder erzeugten Datensatz durch. Das Training läuft maximal max_epochs Epochen lang oder bricht früher ab, sobald der Fehler unter desired_error fällt.

Die Funktion ist besonders geeignet, wenn der gesamte Trainingsdatensatz im Speicher gehalten werden kann. Sie iteriert in jeder Epoche über alle Trainingsbeispiele und passt die Gewichte des Netzes entsprechend dem eingestellten Trainingsalgorithmus an (z. B. Backpropagation, RPROP).

Über den Parameter epochs_between_reports lässt sich steuern, wie häufig Fortschrittsinformationen ausgegeben werden. Wird der Wert auf 0 gesetzt, erfolgt keine Ausgabe. Dies ist nützlich, wenn das Training in Produktionsumgebungen unbeaufsichtigt läuft.

Das Netzwerk-Handle ($ann) wird mit fann_create_standard oder ähnlichen Funktionen erzeugt, der Datensatz ($data) mit fann_read_train_from_file oder fann_create_train_from_callback.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Das neuronale Netz-Handle, wie es von fann_create_standard oder verwandten Funktionen zurückgegeben wird.
$data Pflicht resource Der Trainingsdatensatz als FANN-Daten-Handle, z. B. erzeugt mit fann_read_train_from_file.
$max_epochs Pflicht int Die maximale Anzahl von Trainings-Epochen, nach denen das Training spätestens abgebrochen wird.
$epochs_between_reports Pflicht int Gibt an, nach wie vielen Epochen ein Fortschrittsbericht ausgegeben wird. 0 deaktiviert die Ausgabe vollständig.
$desired_error Pflicht float Der gewünschte maximale mittlere quadratische Fehler (MSE), bei dessen Unterschreitung das Training vorzeitig beendet wird.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Training erfolgreich durchgeführt wurde, oder false im Fehlerfall (z. B. ungültige Handles oder fehlerhafte Parameter).

Beispiele

Einfaches Training auf einem Datensatz aus einer Datei

<?php
// Netzwerk erstellen: 2 Eingaben, 1 Hidden-Layer mit 3 Neuronen, 1 Ausgang
$ann = fann_create_standard(3, 2, 3, 1);

if ($ann) {
    // Lernrate setzen
    fann_set_learning_rate($ann, 0.7);

    // Trainingsdaten aus Datei lesen (z. B. XOR-Problem)
    $data = fann_read_train_from_file('xor.data');

    if ($data) {
        // Maximal 500 Epochen, alle 100 Epochen Bericht, Ziel-MSE 0.001
        $result = fann_train_on_data($ann, $data, 500, 100, 0.001);

        if ($result) {
            echo "Training erfolgreich abgeschlossen." . PHP_EOL;
            echo "Erreichter Fehler: " . fann_get_MSE($ann) . PHP_EOL;
            // Netzwerk speichern
            fann_save($ann, 'xor_trained.net');
        } else {
            echo "Training fehlgeschlagen." . PHP_EOL;
        }

        fann_destroy_train($data);
    }

    fann_destroy($ann);
}
Max epochs 500. Desired error: 0.0010000. Epochs 1. Current error: 0.25124. Epochs 100. Current error: 0.00982. Epochs 200. Current error: 0.00101. Training erfolgreich abgeschlossen. Erreichter Fehler: 0.00099...

Training ohne Fortschrittsausgabe und anschließende Validierung

<?php
$ann  = fann_create_standard(3, 2, 4, 1);
$data = fann_read_train_from_file('sensor.data');

if ($ann && $data) {
    // epochs_between_reports = 0: keine Konsolenausgabe
    $success = fann_train_on_data($ann, $data, 1000, 0, 0.0005);

    if ($success) {
        $mse = fann_get_MSE($ann);
        if ($mse <= 0.0005) {
            echo "Ziel-MSE erreicht: {$mse}" . PHP_EOL;
        } else {
            echo "Maximale Epochen erreicht. MSE: {$mse}" . PHP_EOL;
        }
        fann_save($ann, 'sensor_net.net');
    }

    fann_destroy_train($data);
    fann_destroy($ann);
}
Ziel-MSE erreicht: 0.00048...

// Wichtig · Fallstricke

Erweiterung erforderlich: fann_train_on_data gehört zur FANN-Erweiterung (php-fann), die separat installiert werden muss (pecl install fann). Ab PHP 8.0 werden die Handles intern als FANNConnection-Objekte behandelt.

Ressourcen freigeben: Nach dem Training sollten fann_destroy_train($data) und fann_destroy($ann) aufgerufen werden, um Speicher freizugeben.

Dateiformat: Die Trainingsdatei muss dem FANN-Format entsprechen: erste Zeile enthält die Anzahl der Beispiele, Eingaben und Ausgaben; danach wechseln sich Eingabe- und Ausgabevektoren ab.

Für sehr große Datensätze, die nicht in den Speicher passen, empfiehlt sich stattdessen fann_train_on_file, das direkt von der Festplatte liest.