Start · Sprachen · PHP · Referenz · fann_set_scaling_params

fann_set_scaling_params

Funktion

Berechnet und setzt Skalierungsparameter für Ein- und Ausgabedaten eines neuronalen Netzes anhand der gegebenen Trainingsdaten.

Kategorie: misc

Signatur

fann_set_scaling_params(resource $ann, resource $train_data, int $new_input_min, int $new_input_max, int $new_output_min, int $new_output_max): bool

Beschreibung

fann_set_scaling_params analysiert die Trainingsdaten in $train_data und berechnet daraus die Skalierungsparameter für das neuronale Netz $ann. Diese Parameter werden intern gespeichert und können anschließend mit fann_scale_input, fann_scale_output bzw. fann_scale_train angewendet werden.

Skalierung ist in der Praxis essenziell, um Eingabe- und Ausgabewerte in einen definierten Wertebereich zu normalisieren (z. B. -1 bis 1 oder 0 bis 1). Dadurch wird das Training neuronaler Netze beschleunigt und die Konvergenz verbessert, da alle Merkmale auf einer vergleichbaren Skala liegen.

Die Parameter $new_input_min, $new_input_max, $new_output_min und $new_output_max definieren den Zielwertebereich, in den die Original-Daten linear transformiert werden sollen. Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP.

Diese Funktion ist besonders dann sinnvoll, wenn die Rohdaten stark unterschiedliche Wertebereiche aufweisen, da ohne Normalisierung einzelne Merkmale das Training dominieren könnten.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine FANN-Netz-Ressource, wie sie von fann_create_standard oder ähnlichen Funktionen zurückgegeben wird.
$train_data Pflicht resource Eine FANN-Trainingsdaten-Ressource, wie sie von fann_read_train_from_file oder fann_create_train_from_callback erzeugt wird. Auf Basis dieser Daten werden die Skalierungsparameter berechnet.
$new_input_min Pflicht int Der gewünschte minimale Wert für die skalierten Eingabedaten (z. B. -1 oder 0).
$new_input_max Pflicht int Der gewünschte maximale Wert für die skalierten Eingabedaten (z. B. 1).
$new_output_min Pflicht int Der gewünschte minimale Wert für die skalierten Ausgabedaten (z. B. -1 oder 0).
$new_output_max Pflicht int Der gewünschte maximale Wert für die skalierten Ausgabedaten (z. B. 1).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Skalierungsparameter erfolgreich berechnet und gesetzt wurden. Bei einem Fehler (z. B. ungültige Ressource) wird false zurückgegeben.

Beispiele

Skalierungsparameter setzen und Trainingsdaten skalieren

<?php
// Neuronales Netz mit 2 Eingabe-, 3 versteckten und 1 Ausgabe-Neuron erstellen
$ann = fann_create_standard(3, 2, 3, 1);

// Trainingsdaten aus Datei laden
$train_data = fann_read_train_from_file('training.data');

if ($ann && $train_data) {
    // Skalierungsparameter für Eingabe und Ausgabe berechnen
    // Eingabe wird auf [-1, 1] skaliert, Ausgabe auf [-1, 1]
    if (fann_set_scaling_params($ann, $train_data, -1, 1, -1, 1)) {
        echo "Skalierungsparameter erfolgreich gesetzt." . PHP_EOL;

        // Trainingsdaten skalieren
        fann_scale_train($ann, $train_data);

        // Netz trainieren
        fann_train_on_data($ann, $train_data, 1000, 100, 0.001);

        // Netz speichern
        fann_save($ann, 'trained_network.net');
    } else {
        echo "Fehler beim Setzen der Skalierungsparameter." . PHP_EOL;
    }

    fann_destroy_train($train_data);
    fann_destroy($ann);
}
?>
Skalierungsparameter erfolgreich gesetzt.

Skalierung mit anschließender Vorhersage anwenden

<?php
// Gespeichertes Netz laden
$ann = fann_create_from_file('trained_network.net');
$train_data = fann_read_train_from_file('training.data');

if ($ann && $train_data) {
    // Skalierungsparameter auf Basis der Trainingsdaten neu setzen
    fann_set_scaling_params($ann, $train_data, -1, 1, -1, 1);

    // Eingabewerte für die Vorhersage
    $input = [0.5, 0.8];

    // Eingabe skalieren, bevor sie dem Netz übergeben wird
    fann_scale_input_train_data($train_data, -1, 1);

    // Vorhersage berechnen
    $result = fann_run($ann, $input);

    // Ausgabe zurück-skalieren
    fann_descale_output($ann, $result);

    echo "Vorhersage (rückskaliert): " . $result[0] . PHP_EOL;

    fann_destroy_train($train_data);
    fann_destroy($ann);
}
?>

// Wichtig · Fallstricke

Wichtig: Die Skalierungsparameter müssen vor jedem Training und vor jeder Vorhersage konsistent angewendet werden. Werden die Eingabedaten vor dem Training skaliert, müssen Eingaben zur Vorhersagezeit ebenfalls mit fann_scale_input skaliert und die Ausgabe mit fann_descale_output wieder in den ursprünglichen Wertebereich zurücktransformiert werden.

Erweiterungsabhängigkeit: Diese Funktion ist nur verfügbar, wenn die PHP-FANN-Erweiterung (php-fann) installiert und aktiviert ist. Sie ist nicht Teil der Standard-PHP-Installation.

Die Verwendung eines symmetrischen Wertebereichs wie -1 bis 1 empfiehlt sich bei Aktivierungsfunktionen wie FANN_SIGMOID_SYMMETRIC, während 0 bis 1 für FANN_SIGMOID geeigneter ist.