Start · Sprachen · PHP · Referenz · fann_create_shortcut

fann_create_shortcut

Funktion

Erstellt ein nicht vollständig verbundenes Backpropagation-Netzwerk mit Shortcut-Verbindungen, bei dem jede Schicht direkte Verbindungen zu allen nachfolgenden Schichten besitzt.

seit PHP 5.6.0 Kategorie: misc

Signatur

fann_create_shortcut(int $num_layers, int $num_neurons1, int $num_neurons2, int ...$num_neurons): resource|false

Beschreibung

fann_create_shortcut erzeugt ein künstliches neuronales Netz (FANN-Netzwerk) mit sogenannten Shortcut-Verbindungen. Im Gegensatz zu einem vollständig verbundenen Netz (fann_create_standard) werden dabei nicht nur benachbarte Schichten verbunden, sondern jede Schicht erhält direkte Verbindungen zu allen nachfolgenden Schichten – einschließlich der Ausgabeschicht. Dadurch können Informationen "abgekürzt" weitergeleitet werden.

Dieses Architekturprinzip (ähnlich dem Konzept aus dem Cascade-Correlation-Learning) eignet sich besonders für Probleme, bei denen tiefere Schichten von früh erkannten Merkmalen profitieren sollen, ohne dass sie durch alle Zwischenschichten hindurchgeleitet werden müssen. Shortcut-Netze können in bestimmten Szenarien schneller konvergieren als reine Feedforward-Netze.

Die Funktion nimmt zunächst die Gesamtanzahl der Schichten (num_layers) und dann für jede Schicht die Anzahl der Neuronen als einzelne Argumente entgegen. Der Rückgabewert ist eine FANN-Ressource, die für alle weiteren FANN-Operationen (Training, Ausführung, Speichern) benötigt wird.

Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP und muss als PHP-Extension installiert sein. Sie steht ab PHP 5.6 zur Verfügung.

Parameter

Name Typ Default Beschreibung
$num_layers Pflicht int Die Gesamtanzahl der Schichten im Netzwerk, inklusive Eingabe- und Ausgabeschicht. Muss mindestens 2 betragen.
$num_neurons1 Pflicht int Anzahl der Neuronen in der ersten Schicht (Eingabeschicht).
$num_neurons2 Pflicht int Anzahl der Neuronen in der zweiten Schicht. Bei einem Netz mit nur zwei Schichten entspricht dies der Ausgabeschicht.
$num_neurons int Beliebig viele weitere ganzzahlige Argumente, die die Neuronenanzahl der restlichen Schichten (versteckte Schichten und Ausgabeschicht) angeben. Die letzte Zahl bestimmt die Anzahl der Ausgabeneuronen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine FANN-Netzwerk-Ressource zurück, die für nachfolgende FANN-Funktionen verwendet werden muss. Im Fehlerfall (z. B. ungültige Parameter oder nicht verfügbare FANN-Extension) wird false zurückgegeben.

Beispiele

Einfaches Shortcut-Netzwerk erstellen und trainieren

<?php
// Erstellt ein Shortcut-Netzwerk mit 3 Schichten: 2 Eingabe-, 4 versteckte und 1 Ausgabeneuron
$num_layers   = 3;
$num_input    = 2;
$num_hidden   = 4;
$num_output   = 1;

$ann = fann_create_shortcut($num_layers, $num_input, $num_hidden, $num_output);

if ($ann === false) {
    echo "Netzwerk konnte nicht erstellt werden.";
    exit(1);
}

echo "Netzwerktyp: " . fann_get_network_type($ann) . PHP_EOL;
echo "Anzahl Verbindungen: " . fann_get_total_connections($ann) . PHP_EOL;

// Netzwerk nach Gebrauch freigeben
fann_destroy($ann);
Netzwerktyp: 1 Anzahl Verbindungen: 21

Shortcut-Netzwerk mit XOR-Training

<?php
// XOR-Problem mit einem Shortcut-Netz lösen
$ann = fann_create_shortcut(3, 2, 3, 1);

if ($ann === false) {
    die("Fehler beim Erstellen des Netzwerks");
}

// Lernrate und Trainingsalgorithmus konfigurieren
fann_set_learning_rate($ann, 0.7);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

// Trainingsdaten-Datei muss im FANN-Format vorliegen (z. B. xor.data)
$train_file = __DIR__ . '/xor.data';
if (file_exists($train_file)) {
    fann_train_on_file($ann, $train_file, 1000, 100, 0.001);
    echo "Training abgeschlossen." . PHP_EOL;

    // Ausgabe fuer einen Testeingang
    $result = fann_run($ann, [1.0, 0.0]);
    echo "XOR(1, 0) = " . round($result[0]) . PHP_EOL;
}

fann_save($ann, __DIR__ . '/xor_shortcut.net');
fann_destroy($ann);
Training abgeschlossen. XOR(1, 0) = 1

// Wichtig · Fallstricke

Voraussetzung: Die FANN-PHP-Extension muss installiert und aktiviert sein (extension=fann.so in der php.ini). Ohne diese Extension ist die Funktion nicht verfügbar.

Unterschied zu fann_create_standard: Bei einem Standard-Netz sind nur jeweils benachbarte Schichten verbunden. Shortcut-Netze erlauben direkte Verbindungen über mehrere Schichten hinweg, was die Architektur flexibler, aber auch komplexer macht.

Ressourcenverwaltung: Das zurückgegebene Netzwerk-Handle ist eine native Ressource und muss nach der Verwendung explizit mit fann_destroy() freigegeben werden, um Speicherlecks zu vermeiden.

In PHP 8.0+ wird die FANN-Extension nur eingeschränkt gepflegt; prüfen Sie die Kompatibilität mit Ihrer PHP-Version vor dem Produktiveinsatz.