Start · Sprachen · PHP · Referenz · fann_copy

fann_copy

Funktion

Erstellt eine vollständige Kopie einer bestehenden FANN-Netzwerk-Ressource und gibt die neue Ressource zurück.

Kategorie: misc

Signatur

fann_copy(resource $ann): resource|false

Beschreibung

fann_copy erzeugt eine tiefe Kopie (Deep Copy) einer FANN-Netzwerkstruktur. Das ursprüngliche Netzwerk bleibt dabei unverändert. Die neue Ressource ist vollständig unabhängig vom Original und besitzt eigene Gewichte, Verbindungen und Konfigurationsparameter.

Diese Funktion ist nützlich, wenn man Varianten eines trainierten Netzwerks ausprobieren möchte, ohne das Original zu verändern – zum Beispiel beim Fine-Tuning, beim Vergleich verschiedener Trainingsansätze oder beim Speichern eines Zwischenstands vor weiteren Trainingsschritten.

Beide Ressourcen – Original und Kopie – müssen am Ende unabhängig voneinander mit fann_destroy freigegeben werden, um Speicherlecks zu vermeiden.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netzwerkressource, wie sie z. B. von fann_create_standard, fann_create_from_file oder ähnlichen Funktionen zurückgegeben wird.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine neue FANN-Netzwerkressource zurück, die eine vollständige Kopie des übergebenen Netzwerks darstellt. Im Fehlerfall wird false zurückgegeben.

Beispiele

Netzwerkkopie erstellen und unabhängig weitertrainieren

<?php
// Originales Netzwerk erstellen
$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);

// Kopie des Netzwerks erstellen
$ann_copy = fann_copy($ann);

if ($ann_copy === false) {
    echo "Fehler beim Erstellen der Kopie.\n";
} else {
    echo "Anzahl Schichten (Original): " . fann_get_num_layers($ann) . "\n";
    echo "Anzahl Schichten (Kopie):    " . fann_get_num_layers($ann_copy) . "\n";

    // Weiterverarbeitung der Kopie, z. B. Training mit anderen Daten
    // fann_train_on_file($ann_copy, 'daten2.data', 1000, 10, 0.0001);

    // Beide Ressourcen freigeben
    fann_destroy($ann_copy);
}

fann_destroy($ann);
?>
Anzahl Schichten (Original): 3 Anzahl Schichten (Kopie): 3

Zwischenstand vor weiterem Training sichern

<?php
// Netzwerk aus Datei laden
$ann = fann_create_from_file('mein_netzwerk.net');

if ($ann === false) {
    die("Netzwerk konnte nicht geladen werden.\n");
}

// Zustand sichern, bevor weiteres Training beginnt
$backup = fann_copy($ann);

// Weiteres Training des Originals
fann_train_on_file($ann, 'neue_daten.data', 500, 50, 0.001);

// Vergleich der Fehlerrate vor und nach dem Training
$mse_nach  = fann_get_MSE($ann);
fann_reset_MSE($backup);
fann_train_on_file($backup, 'neue_daten.data', 1, 1, 1.0); // MSE ermitteln
$mse_vorher = fann_get_MSE($backup);

echo "MSE vorher: $mse_vorher\n";
echo "MSE nachher: $mse_nach\n";

fann_destroy($ann);
fann_destroy($backup);
?>

// Wichtig · Fallstricke

Speicherverwaltung: Jede mit fann_copy erzeugte Ressource belegt eigenen Speicher. Es ist zwingend erforderlich, sowohl das Original als auch die Kopie am Ende des Skripts mit fann_destroy freizugeben, um Speicherlecks zu vermeiden.

Erweiterung: fann_copy ist Teil der FANN-Erweiterung (Fast Artificial Neural Network Library), die separat installiert bzw. kompiliert werden muss. Die Verfügbarkeit kann mit extension_loaded('fann') geprüft werden.