Start · Sprachen · PHP · Referenz · fann_train_on_file

fann_train_on_file

Funktion

Trainiert ein neuronales Netz für eine bestimmte Anzahl von Epochen mit einem Datensatz, der aus einer FANN-Datei geladen wird.

seit PHP 5.0.0 Kategorie: misc

Signatur

fann_train_on_file(resource $ann, string $filename, int $max_epochs, int $epochs_between_reports, float $desired_error): bool

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

Typ
bool
Beschreibung
Gibt 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";
}
?>
Training erfolgreich abgeschlossen. MSE: 0.00098...

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);
?>
Training beendet. Fehler: 0.000987...

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