Signatur
Beschreibung
fann_set_weight ermöglicht es, das Gewicht einer spezifischen Verbindung zwischen zwei Neuronen in einem neuronalen Netzwerk direkt zu setzen. Dies ist nützlich, wenn bestehende Verbindungsgewichte manuell angepasst oder von extern (z. B. aus einer Datenbank) geladen und wiederhergestellt werden sollen.
Die Funktion arbeitet auf Basis von Neuronen-Indizes, wobei from_neuron das sendende und to_neuron das empfangende Neuron bezeichnet. Die Indizes beziehen sich auf die interne Nummerierung der Neuronen im FANN-Netzwerk, die alle Schichten (Eingabe, versteckte Schichten, Ausgabe) inklusive Bias-Neuronen umfasst.
Typische Einsatzszenarien sind die Wiederherstellung eines gespeicherten Netzwerkzustandes ohne eine vollständige FANN-Datei laden zu müssen, sowie das gezielte Experimentieren mit einzelnen Verbindungsgewichten. In Kombination mit fann_get_connection_array lassen sich alle Verbindungen auslesen, manipulieren und anschließend mit fann_set_weight wieder zurückschreiben.
Die Funktion gehört zur FANN-Extension (Fast Artificial Neural Network) für PHP, die als PECL-Paket verfügbar ist. Ein gültiges FANN-Netzwerk-Resource-Handle ist Voraussetzung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Ein gültiges FANN-Netzwerk-Resource-Handle, wie es von Funktionen wie fann_create_standard oder fann_create_from_file zurückgegeben wird. |
|
| $from_neuron Pflicht | int | Der Index des sendenden Neurons. Die Indizes beginnen bei 0 und umfassen alle Neuronen aller Schichten einschließlich der Bias-Neuronen. | |
| $to_neuron Pflicht | int | Der Index des empfangenden Neurons. Wie bei from_neuron wird die globale Neuronen-Nummerierung verwendet. |
|
| $weight Pflicht | float | Das neue Gewicht der Verbindung als Gleitkommazahl. Positive und negative Werte sind gleichermaßen zulässig. |
Rückgabewert
true zurück, wenn das Gewicht erfolgreich gesetzt wurde. Gibt false zurück, wenn ein Fehler aufgetreten ist, z. B. wenn das Resource-Handle ungültig ist oder die angegebenen Neuronen-Indizes keine gültige Verbindung beschreiben.Beispiele
Verbindungsgewicht gezielt setzen und überprüfen
<?php
// Einfaches Netzwerk erstellen: 2 Eingabe-, 3 versteckte und 1 Ausgabeneuron
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann) {
// Alle Verbindungen auslesen
$connections = fann_get_connection_array($ann);
echo "Verbindungen vor der Änderung:" . PHP_EOL;
foreach ($connections as $conn) {
echo "Von {$conn->from_neuron} nach {$conn->to_neuron}: Gewicht = {$conn->weight}" . PHP_EOL;
}
// Gewicht der ersten Verbindung auf 0.5 setzen
$firstConn = $connections[0];
$success = fann_set_weight($ann, $firstConn->from_neuron, $firstConn->to_neuron, 0.5);
if ($success) {
echo PHP_EOL . "Gewicht erfolgreich gesetzt." . PHP_EOL;
}
// Verbindungen erneut auslesen zur Überprüfung
$connectionsAfter = fann_get_connection_array($ann);
echo "Neues Gewicht der ersten Verbindung: " . $connectionsAfter[0]->weight . PHP_EOL;
fann_destroy($ann);
}
Netzwerkgewichte aus Array wiederherstellen
<?php
// Gespeicherte Gewichte (z. B. aus einer Datenbank geladen)
$savedWeights = [
['from' => 0, 'to' => 3, 'weight' => 0.75],
['from' => 0, 'to' => 4, 'weight' => -0.30],
['from' => 1, 'to' => 3, 'weight' => 0.50],
['from' => 1, 'to' => 4, 'weight' => 0.88],
// ... weitere Verbindungen
];
$ann = fann_create_standard(2, 2, 2, 1);
if ($ann) {
foreach ($savedWeights as $w) {
$result = fann_set_weight($ann, $w['from'], $w['to'], $w['weight']);
if (!$result) {
echo "Fehler beim Setzen der Verbindung {$w['from']} -> {$w['to']}" . PHP_EOL;
}
}
echo "Alle gespeicherten Gewichte wurden wiederhergestellt." . PHP_EOL;
fann_destroy($ann);
}
// Wichtig · Fallstricke
Neuronen-Indizes: Die korrekte Ermittlung der Neuronen-Indizes ist entscheidend. Falsche Indizes können dazu führen, dass false zurückgegeben wird oder eine falsche Verbindung gesetzt wird. Es empfiehlt sich, die Indizes immer zuerst über fann_get_connection_array zu ermitteln.
Bias-Neuronen: Bias-Neuronen werden in der Neuronen-Nummerierung mitgezählt, was die Indizes verschieben kann. Dies ist ein häufiger Fehler bei der manuellen Angabe von Neuronen-Indizes.
PECL-Extension: Die FANN-Funktionen sind nur verfügbar, wenn die PECL-Extension fann installiert und aktiviert ist. Ohne diese Extension führen alle fann_*-Aufrufe zu einem Fatal Error.