Start · Sprachen · PHP · Referenz · fann_create_sparse_array

fann_create_sparse_array

Funktion

Erstellt ein nicht vollständig verbundenes Backpropagation-Netzwerk anhand eines Arrays von Schichtgrößen und einer Verbindungsrate.

Kategorie: misc

Signatur

fann_create_sparse_array(float $connection_rate, int $num_layers, array $layers): resource|false

Beschreibung

fann_create_sparse_array erzeugt ein künstliches neuronales Netz (ANN) vom Typ Sparse Network – also ein Netz, bei dem nicht alle Neuronen jeder Schicht mit allen Neuronen der nächsten Schicht verbunden sind. Der Grad der Verbindungen wird über den Parameter connection_rate gesteuert: Ein Wert von 1.0 entspricht einem vollständig verbundenen Netz (wie bei fann_create_standard_array), während kleinere Werte dünnere Verbindungen erzeugen.

Die Netzwerkarchitektur wird über ein PHP-Array übergeben, das für jede Schicht (Eingabe-, versteckte und Ausgabeschichten) die Anzahl der Neuronen enthält. Die Funktion entspricht funktional fann_create_sparse, akzeptiert die Schichtinformationen aber als Array statt als variable Argumentliste.

Sparse Networks eignen sich besonders, wenn man Überanpassung (Overfitting) reduzieren möchte oder wenn sehr große Netze trainiert werden sollen und eine vollständige Vernetzung zu hohem Speicher- und Rechenaufwand führen würde. Die erzeugte Ressource muss nach der Verwendung mit fann_destroy freigegeben werden.

Diese Funktion ist Teil der FANN-Erweiterung (Fast Artificial Neural Network) für PHP und erfordert, dass die fann-Extension kompiliert und aktiviert ist.

Parameter

Name Typ Default Beschreibung
$connection_rate Pflicht float Verbindungsrate zwischen den Schichten als Dezimalzahl zwischen 0.0 und 1.0. Der Wert 1.0 erzeugt ein vollständig verbundenes Netz; kleinere Werte reduzieren die Anzahl der Verbindungen proportional.
$num_layers Pflicht int Gesamtanzahl der Schichten im Netzwerk (inkl. Eingabe- und Ausgabeschicht).
$layers Pflicht array Numerisch indiziertes Array mit der Anzahl der Neuronen pro Schicht. Das erste Element steht für die Eingabeschicht, das letzte für die Ausgabeschicht, dazwischen liegende Elemente definieren versteckte Schichten. Die Anzahl der Array-Einträge muss mit num_layers übereinstimmen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine FANN-Netzwerk-Ressource zurück, die für weitere fann_*-Funktionen verwendet werden kann. Im Fehlerfall (z. B. ungültige Parameter oder nicht vorhandene FANN-Extension) wird false zurückgegeben.

Beispiele

Einfaches Sparse Network mit einer versteckten Schicht

<?php
// Verbindungsrate von 50 %, 3 Schichten: 2 Eingaben, 4 versteckte Neuronen, 1 Ausgabe
$connection_rate = 0.5;
$layers = [2, 4, 1];

$ann = fann_create_sparse_array($connection_rate, count($layers), $layers);

if ($ann) {
    echo "Netzwerk erfolgreich erstellt." . PHP_EOL;
    echo "Anzahl Schichten: " . fann_get_num_layers($ann) . PHP_EOL;
    echo "Anzahl Verbindungen: " . fann_get_total_connections($ann) . PHP_EOL;
    fann_destroy($ann);
} else {
    echo "Fehler beim Erstellen des Netzwerks." . PHP_EOL;
}
Netzwerk erfolgreich erstellt. Anzahl Schichten: 3 Anzahl Verbindungen: (variiert je nach Zufallsauswahl bei 50 % Rate)

Vergleich Sparse vs. vollständiges Netz

<?php
$layers = [4, 8, 8, 2];

// Sparse Network mit 75 % Verbindungen
$sparse = fann_create_sparse_array(0.75, count($layers), $layers);

// Vollständig verbundenes Netz zum Vergleich
$full = fann_create_standard_array(count($layers), $layers);

if ($sparse && $full) {
    $conn_sparse = fann_get_total_connections($sparse);
    $conn_full   = fann_get_total_connections($full);

    echo "Verbindungen (Sparse 75%): {$conn_sparse}" . PHP_EOL;
    echo "Verbindungen (Vollständig): {$conn_full}" . PHP_EOL;
    echo "Reduktion: " . round((1 - $conn_sparse / $conn_full) * 100, 1) . " %" . PHP_EOL;

    fann_destroy($sparse);
    fann_destroy($full);
}
Verbindungen (Sparse 75%): (ca. 75 % der vollständigen Verbindungen) Verbindungen (Vollständig): (100 % Verbindungen) Reduktion: ca. 25.0 %

// Wichtig · Fallstricke

Voraussetzung: Die PHP-Erweiterung fann muss installiert und in der php.ini aktiviert sein (extension=fann). Diese Extension ist nicht standardmäßig in PHP enthalten.

Ressourcenverwaltung: Jedes mit fann_create_sparse_array erstellte Netzwerk muss nach der Verwendung explizit mit fann_destroy freigegeben werden, um Speicherlecks zu vermeiden.

Zufälligkeit: Bei einer connection_rate kleiner als 1.0 werden die Verbindungen zufällig ausgewählt. Das bedeutet, dass zwei Aufrufe mit identischen Parametern unterschiedliche Netzwerktopologien erzeugen können. Für reproduzierbare Ergebnisse sollte ein fixer Zufalls-Seed gesetzt werden, sofern die FANN-Version dies unterstützt.

Array-Länge: Die Anzahl der Elemente im layers-Array muss exakt mit dem Wert von num_layers übereinstimmen, da sonst unerwartetes Verhalten oder ein Fehler auftreten kann.