Start · Sprachen · PHP · Referenz · fann_randomize_weights

fann_randomize_weights

Funktion

Weist jeder Verbindung im neuronalen Netz ein zufälliges Gewicht zwischen <code>min_weight</code> und <code>max_weight</code> zu.

seit PHP 5.6.0 Kategorie: misc

Signatur

fann_randomize_weights(resource $ann, float $min_weight, float $max_weight): bool

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

Typ
bool
Beschreibung
Gibt 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;
}
Gewichte erfolgreich randomisiert.

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;
}
Netz geladen. Aktuelle Gewichte werden zurückgesetzt... Gewichte wurden neu initialisiert zwischen -1.0 und 1.0.

// 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.