Start · Sprachen · PHP · Referenz · fann_create_shortcut_array

fann_create_shortcut_array

Funktion

Erstellt ein nicht vollständig verbundenes Backpropagation-Netzwerk mit Shortcut-Verbindungen aus einem Array von Schichtgrößen.

Kategorie: misc

Signatur

fann_create_shortcut_array(int $num_layers, array $layers): resource|false

Beschreibung

fann_create_shortcut_array() erzeugt ein künstliches neuronales Netz (FANN) mit sogenannten Shortcut-Verbindungen auf Basis der FANN-Bibliothek (Fast Artificial Neural Network). Im Gegensatz zu einem vollständig verbundenen Netzwerk dürfen bei einem Shortcut-Netzwerk Verbindungen zwischen nicht direkt benachbarten Schichten bestehen, d. h. eine Eingabeschicht kann direkt mit einer Ausgabeschicht oder einer tiefer liegenden versteckten Schicht verbunden sein.

Diese Architektur kann das Lernen bestimmter Muster erleichtern und beschleunigen, da Informationen aus frühen Schichten direkt an spätere Schichten weitergegeben werden können, ohne alle Zwischenschichten zu durchlaufen. Die Topologie des Netzes wird über ein Array definiert, in dem jeder Eintrag die Anzahl der Neuronen einer Schicht angibt (beginnend mit der Eingabeschicht, endend mit der Ausgabeschicht).

Die Funktion ist das Array-basierte Äquivalent zu fann_create_shortcut(), das variable Argumente verwendet. Sie erfordert die FANN-PHP-Erweiterung und ist insbesondere dann nützlich, wenn die Schichtgrößen zur Laufzeit dynamisch berechnet werden.

Das zurückgegebene Ressource-Handle muss nach der Verwendung mit fann_destroy() freigegeben werden, um Speicherlecks zu vermeiden.

Parameter

Name Typ Default Beschreibung
$num_layers Pflicht int Die Gesamtanzahl der Schichten im neuronalen Netz, einschließlich Eingabe- und Ausgabeschicht. Muss mit der Anzahl der Elemente im Parameter layers übereinstimmen.
$layers Pflicht array Ein numerisches Array, das die Anzahl der Neuronen je Schicht angibt. Der erste Wert entspricht der Eingabeschicht, der letzte Wert der Ausgabeschicht, alle Werte dazwischen definieren verdeckte Schichten.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine FANN-Ressource zurück, die das erstellte neuronale Netz repräsentiert, oder false im Fehlerfall (z. B. bei ungültigen Parametern oder wenn die FANN-Erweiterung nicht verfügbar ist).

Beispiele

Einfaches Shortcut-Netz mit drei Schichten erstellen

<?php
// 2 Eingabeneuronen, 3 versteckte Neuronen, 1 Ausgabeneuron
$layers = [2, 3, 1];
$num_layers = count($layers);

$ann = fann_create_shortcut_array($num_layers, $layers);

if ($ann) {
    echo "Netzwerk erfolgreich erstellt." . PHP_EOL;
    echo "Anzahl Schichten: " . fann_get_num_layers($ann) . PHP_EOL;
    echo "Anzahl Neuronen gesamt: " . fann_get_total_neurons($ann) . PHP_EOL;
    fann_destroy($ann);
} else {
    echo "Fehler beim Erstellen des Netzwerks." . PHP_EOL;
}
Netzwerk erfolgreich erstellt. Anzahl Schichten: 3 Anzahl Neuronen gesamt: 7

Dynamisch erzeugtes Shortcut-Netz trainieren

<?php
// Schichtgrößen dynamisch bestimmen
$inputs  = 4;
$hidden  = 8;
$outputs = 2;

$layers = [$inputs, $hidden, $outputs];
$ann = fann_create_shortcut_array(count($layers), $layers);

if ($ann) {
    // Lernrate und Trainingsalgorithmus setzen
    fann_set_learning_rate($ann, 0.7);
    fann_set_training_algorithm($ann, FANN_TRAIN_RPROP);

    // Trainings-Datei laden und Netz trainieren
    $train_data = fann_read_train_from_file('training_data.dat');
    if ($train_data) {
        fann_train_on_data($ann, $train_data, 1000, 10, 0.001);
        fann_save($ann, 'shortcut_net.net');
        fann_destroy_train($train_data);
    }

    fann_destroy($ann);
    echo "Training abgeschlossen." . PHP_EOL;
}
Training abgeschlossen.

// Wichtig · Fallstricke

Erweiterungsvoraussetzung: Diese Funktion steht nur zur Verfügung, wenn die PHP-FANN-Erweiterung installiert und aktiviert ist (extension=fann in der php.ini). Die Erweiterung setzt die native FANN-C-Bibliothek voraus.

Ressourcen-Verwaltung: Das zurückgegebene Handle muss nach der Verwendung zwingend mit fann_destroy() freigegeben werden, da es sonst zu Speicherlecks kommt. Ab PHP 8 kann dies abhängig von der Erweiterungsversion ein Objekt statt einer Ressource sein.

Unterschied zu fann_create_standard_array(): Bei einem Standard-Netzwerk sind nur direkt benachbarte Schichten verbunden. Bei einem Shortcut-Netzwerk bestehen zusätzliche Direktverbindungen zwischen nicht benachbarten Schichten, was die Netzwerkkapazität und Lerngeschwindigkeit in bestimmten Szenarien verbessern kann.