Signatur
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
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);
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);
// 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.