Start · Sprachen · PHP · Referenz · fann_save

fann_save

Funktion

Speichert ein FANN-Netzwerk vollständig in einer Konfigurationsdatei, die später mit <code>fann_create_from_file()</code> wieder geladen werden kann.

Kategorie: misc

Signatur

fann_save(resource $ann, string $configuration_file): bool

Beschreibung

fann_save() serialisiert ein trainiertes oder konfiguriertes neuronales Netz (FANN – Fast Artificial Neural Network) in eine textbasierte Konfigurationsdatei. Die Datei enthält alle Netzwerkparameter wie Topologie, Gewichte, Aktivierungsfunktionen und Trainingseinstellungen.

Die Funktion ist besonders nützlich, wenn ein Netz nach dem Training persistiert werden soll, um es in einem späteren Prozess oder auf einem anderen System wieder zu laden – ohne erneut trainieren zu müssen. Die erzeugte Datei ist menschenlesbar und plattformübergreifend kompatibel.

Nach dem Speichern kann das Netz mit fann_create_from_file() exakt wiederhergestellt werden. So lassen sich Trainings- und Inferenzprozesse sauber voneinander trennen.

Diese Funktion steht nur zur Verfügung, wenn die FANN-Extension installiert ist (PECL-Paket fann).

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netzwerk-Ressource, wie sie von Funktionen wie fann_create_standard() oder fann_create_from_file() zurückgegeben wird.
$configuration_file Pflicht string Pfad zur Zieldatei, in die das Netzwerk gespeichert wird. Die Datei wird angelegt oder überschrieben. Es wird empfohlen, die Endung .net zu verwenden, z. B. /var/data/model.net.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Netzwerk erfolgreich gespeichert wurde, andernfalls false (z. B. bei fehlenden Schreibrechten oder ungültiger Ressource).

Beispiele

Netzwerk trainieren und in Datei speichern

<?php
// Einfaches Netz: 2 Eingaben, 1 versteckte Schicht mit 3 Neuronen, 1 Ausgabe
$ann = fann_create_standard(3, 2, 3, 1);

if ($ann) {
    // Aktivierungsfunktion für alle Schichten setzen
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    // Netz mit Trainingsdaten trainieren
    $train_file = __DIR__ . '/xor.data';
    fann_train_on_file($ann, $train_file, 500, 100, 0.001);

    // Trainiertes Netz speichern
    $save_path = __DIR__ . '/xor_trained.net';
    if (fann_save($ann, $save_path)) {
        echo "Netzwerk erfolgreich gespeichert unter: " . $save_path . PHP_EOL;
    } else {
        echo "Fehler beim Speichern des Netzwerks." . PHP_EOL;
    }

    fann_destroy($ann);
} else {
    echo "Fehler beim Erstellen des Netzwerks." . PHP_EOL;
}
Netzwerk erfolgreich gespeichert unter: /var/www/html/xor_trained.net

Gespeichertes Netzwerk wieder laden und nutzen

<?php
$save_path = __DIR__ . '/xor_trained.net';

// Netz aus Datei wiederherstellen
$ann = fann_create_from_file($save_path);

if ($ann) {
    // Inferenz: XOR-Problem
    $result = fann_run($ann, [1.0, -1.0]);
    echo "Ergebnis für [1, -1]: " . round($result[0]) . PHP_EOL;

    fann_destroy($ann);
} else {
    echo "Fehler beim Laden des Netzwerks." . PHP_EOL;
}
Ergebnis für [1, -1]: 1

// Wichtig · Fallstricke

Dateisystem-Berechtigungen: Das PHP-Prozess-Konto (z. B. www-data) benötigt Schreibrechte auf das Zielverzeichnis. Andernfalls gibt fann_save() false zurück, ohne eine PHP-Exception zu werfen – der Rückgabewert sollte daher immer geprüft werden.

Überschreiben ohne Warnung: Existiert die Zieldatei bereits, wird sie kommentarlos überschrieben. Für versionierte Modelle empfiehlt sich eine dynamische Benennung, z. B. mit Zeitstempel oder Versionskennung.

PECL-Extension: Die Funktion ist Teil der PECL-Extension fann und steht nicht im PHP-Kern zur Verfügung. Sie muss separat installiert und in der php.ini aktiviert werden.