Signatur
Beschreibung
fann_set_weight_array ermöglicht es, mehrere Verbindungsgewichte eines neuronalen Netzes (FANN – Fast Artificial Neural Network) auf einmal zu setzen. Dabei wird ein Array von Verbindungsobjekten übergeben, wie es beispielsweise von fann_get_connection_array zurückgegeben wird.
Jedes Element des übergebenen Arrays muss ein Objekt oder assoziatives Array sein, das die Eigenschaften from_neuron, to_neuron und weight enthält. Die Funktion iteriert über alle Einträge und setzt die jeweiligen Gewichte direkt im Netzwerk.
Diese Funktion ist besonders nützlich, wenn man zuvor gespeicherte Netzwerkgewichte wiederherstellen, ein trainiertes Netzwerk klonen oder die Gewichte eines Netzes gezielt manipulieren möchte – ohne das Netz vollständig neu trainieren zu müssen.
Zum Setzen eines einzelnen Gewichts steht alternativ fann_set_weight zur Verfügung. Für die vollständige Persistenz eines Netzes empfiehlt sich fann_save.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine gültige FANN-Netzwerk-Ressource, die zuvor mit einer der fann_create_*-Funktionen erstellt wurde. |
|
| $connections Pflicht | array | Ein Array von Verbindungsobjekten/-arrays, wie sie z. B. von fann_get_connection_array geliefert werden. Jedes Element muss die Felder from_neuron, to_neuron und weight besitzen. |
Rückgabewert
true zurück, wenn die Gewichte erfolgreich gesetzt wurden. Bei einem ungültigen Netzwerk-Handle oder fehlerhaften Verbindungsdaten wird false zurückgegeben.Beispiele
Verbindungsgewichte auslesen und wiederherstellen
<?php
// Netzwerk erstellen: 2 Eingabe-, 3 versteckte, 1 Ausgabe-Neuron
$ann = fann_create_standard(3, 2, 3, 1);
// Netzwerk trainieren (vereinfacht ausgelassen)
// ...
// Aktuelle Verbindungen und Gewichte auslesen
$connections = fann_get_connection_array($ann);
echo "Verbindungen vor dem Zurücksetzen:" . PHP_EOL;
foreach ($connections as $conn) {
echo " {$conn->from_neuron} -> {$conn->to_neuron}: {$conn->weight}" . PHP_EOL;
}
// Gewichte verändern (z. B. alle auf 0.5 setzen)
foreach ($connections as $conn) {
$conn->weight = 0.5;
}
// Veränderte Gewichte zurückschreiben
$result = fann_set_weight_array($ann, $connections);
if ($result) {
echo "Gewichte erfolgreich gesetzt." . PHP_EOL;
} else {
echo "Fehler beim Setzen der Gewichte." . PHP_EOL;
}
// Kontrolle: Gewichte erneut auslesen
$updated = fann_get_connection_array($ann);
foreach ($updated as $conn) {
echo " {$conn->from_neuron} -> {$conn->to_neuron}: {$conn->weight}" . PHP_EOL;
}
fann_destroy($ann);
Gewichte eines trainierten Netzes in einem zweiten Netz wiederverwenden
<?php
// Erstes Netz erstellen und Gewichte laden
$ann1 = fann_create_standard(3, 2, 4, 1);
fann_randomize_weights($ann1, -1.0, 1.0);
// Gewichte des ersten Netzes sichern
$savedConnections = fann_get_connection_array($ann1);
// Zweites, baugleiches Netz erstellen
$ann2 = fann_create_standard(3, 2, 4, 1);
// Gesicherte Gewichte in das zweite Netz übertragen
if (fann_set_weight_array($ann2, $savedConnections)) {
echo "Gewichte erfolgreich auf zweites Netz übertragen." . PHP_EOL;
}
fann_destroy($ann1);
fann_destroy($ann2);
// Wichtig · Fallstricke
Voraussetzung: Die FANN-Erweiterung (ext/fann) muss installiert und aktiviert sein. Sie ist nicht standardmäßig in PHP enthalten und muss über PECL oder den Paketmanager des Betriebssystems nachinstalliert werden.
Die Verbindungsobjekte müssen exakt zur Topologie des Netzwerks passen. Werden from_neuron- oder to_neuron-Indizes angegeben, die im Netzwerk nicht existieren, werden diese Einträge stillschweigend ignoriert oder führen zu undefiniertem Verhalten.
Für persistente Speicherung eines vollständigen Netzwerks inklusive Topologie sollte fann_save und fann_create_from_file bevorzugt werden.