Signatur
Beschreibung
fann_randomize_weights() initialisiert alle Gewichte (Weights) eines neuronalen Netzes mit zufälligen Werten innerhalb des angegebenen Bereichs [min_weight, max_weight]. Diese Funktion gehört zur FANN-Extension (Fast Artificial Neural Network) und ist typischerweise der erste Schritt nach der Erstellung eines neuen Netzes, bevor das Training beginnt.
Eine gute Initialisierung der Gewichte ist entscheidend für die Konvergenzgeschwindigkeit und die Qualität des Trainings. Zu große oder zu kleine Anfangswerte können dazu führen, dass das Netz langsam oder gar nicht konvergiert. Typische Wertebereiche liegen zwischen -1.0 und 1.0 oder -0.5 und 0.5.
Nach dem Aufruf von fann_randomize_weights() kann das Netz mit Trainingsalgorithmen wie fann_train_on_data() oder fann_train_on_file() weiter optimiert werden. Die Funktion kann auch während des Trainings aufgerufen werden, um das Netz neu zu initialisieren und einen anderen Startpunkt auszuprobieren.
Wenn ein bestehendes Netz aus einer Datei geladen wird, sind die Gewichte bereits gesetzt. In diesem Fall ist fann_randomize_weights() nicht erforderlich, kann aber verwendet werden, um das Netz von Grund auf neu zu trainieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine FANN-Netz-Ressource, die zuvor mit Funktionen wie fann_create_standard() oder fann_create_from_file() erzeugt wurde. |
|
| $min_weight Pflicht | float | Der minimale Wert für die zufällig generierten Gewichte. Typischerweise ein negativer Wert wie -1.0 oder -0.5. |
|
| $max_weight Pflicht | float | Der maximale Wert für die zufällig generierten Gewichte. Typischerweise ein positiver Wert wie 1.0 oder 0.5. |
Rückgabewert
true zurück, wenn die Gewichte erfolgreich randomisiert wurden, andernfalls false. Im Fehlerfall (z. B. ungültige Ressource) wird false zurückgegeben.Beispiele
Einfache Gewichtsinitialisierung nach Netzerstellung
<?php
// Erstelle ein einfaches neuronales Netz: 2 Eingaben, 1 versteckte Schicht (3 Neuronen), 1 Ausgabe
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann) {
// Zufällige Gewichte zwischen -0.5 und 0.5 setzen
if (fann_randomize_weights($ann, -0.5, 0.5)) {
echo "Gewichte erfolgreich randomisiert." . PHP_EOL;
} else {
echo "Fehler beim Randomisieren der Gewichte." . PHP_EOL;
}
// Netz trainieren (Beispiel mit Datei)
// fann_train_on_file($ann, 'trainingsdaten.data', 1000, 100, 0.001);
fann_destroy($ann);
} else {
echo "Fehler beim Erstellen des neuronalen Netzes." . PHP_EOL;
}
Neustart des Trainings mit neuen Zufallsgewichten
<?php
// Netz aus Datei laden und Gewichte zurücksetzen für erneutes Training
$ann = fann_create_from_file('mein_netz.net');
if ($ann) {
echo "Netz geladen. Aktuelle Gewichte werden zurückgesetzt..." . PHP_EOL;
// Gewichte neu randomisieren, um von vorne zu trainieren
fann_randomize_weights($ann, -1.0, 1.0);
echo "Gewichte wurden neu initialisiert zwischen -1.0 und 1.0." . PHP_EOL;
// Hier würde das Training erneut starten
// fann_train_on_file($ann, 'trainingsdaten.data', 500, 50, 0.0001);
fann_save($ann, 'mein_netz_neu.net');
fann_destroy($ann);
} else {
echo "Fehler beim Laden des Netzes." . PHP_EOL;
}
// Wichtig · Fallstricke
Hinweis zur FANN-Extension: Die FANN-Funktionen sind nicht standardmäßig in PHP verfügbar. Die Extension php-fann muss separat installiert und in der php.ini aktiviert werden. Unter Linux kann sie oft über den Paketmanager (sudo apt install php-fann) installiert werden.
Wertebereich: Es ist darauf zu achten, dass min_weight kleiner als max_weight ist. Ist der Wertebereich zu groß gewählt (z. B. -100.0 bis 100.0), kann das Training instabil werden oder gar nicht konvergieren. Empfohlene Wertebereiche liegen typischerweise zwischen -1.0 und 1.0.
Reproduzierbarkeit: Da die Gewichte zufällig gesetzt werden, liefert jeder Aufruf ein anderes Ergebnis. Für reproduzierbare Ergebnisse kann srand() vor dem Aufruf gesetzt werden, jedoch hängt dies von der internen Implementierung der FANN-Bibliothek ab.