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