Start · Sprachen · PHP · Referenz · fann_scale_train

fann_scale_train

Funktion

Skaliert die Ein- und Ausgabedaten eines Trainings-Datensatzes anhand zuvor mit <code>fann_set_scaling_params</code> berechneter Parameter.

Kategorie: misc

Signatur

fann_scale_train(resource $ann, resource $data): bool

Beschreibung

fann_scale_train wendet eine zuvor konfigurierte Skalierung auf alle Ein- und Ausgabewerte eines FANN-Trainings-Datensatzes an. Die Skalierungsparameter müssen zuvor mittels fann_set_scaling_params oder fann_calculate_mean_stddev für das neuronale Netz berechnet worden sein.

Das Skalieren von Trainingsdaten ist ein wichtiger Vorverarbeitungsschritt beim Training künstlicher neuronaler Netze. Durch die Normalisierung der Eingabe- und Ausgabewerte auf einen einheitlichen Wertebereich (z. B. zwischen 0 und 1 oder −1 und 1) kann das Training erheblich beschleunigt und die Genauigkeit des Netzes verbessert werden.

Typischerweise wird diese Funktion aufgerufen, nachdem Trainingsdaten mit fann_read_train_from_file geladen und Skalierungsparameter mit fann_set_scaling_params gesetzt wurden. Vor der Verwendung der Netz-Ausgaben im realen Kontext müssen die skalierten Werte mit fann_descale_output oder fann_descale_train wieder in den ursprünglichen Wertebereich zurückskaliert werden.

Die Funktion verändert den Trainings-Datensatz direkt (in-place). Eine mehrfache Anwendung ohne zwischenzeitliches Descaling führt zu falschen Werten.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netz-Ressource, die zuvor mit fann_create_standard oder einer ähnlichen Funktion erstellt wurde und für die Skalierungsparameter gesetzt wurden.
$data Pflicht resource Eine gültige FANN-Trainings-Datensatz-Ressource, die z. B. mit fann_read_train_from_file geladen wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Skalierung erfolgreich durchgeführt wurde, andernfalls false. Im Fehlerfall (z. B. wenn keine Skalierungsparameter gesetzt wurden) wird false zurückgegeben.

Beispiele

Trainingsdaten skalieren und Netz trainieren

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

// Aktivierungsfunktion setzen
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

// Trainingsdaten laden
$train_data = fann_read_train_from_file('xor.data');

if ($ann && $train_data) {
    // Skalierungsparameter berechnen (Eingabe: 0..1, Ausgabe: -1..1)
    fann_set_scaling_params(
        $ann,
        $train_data,
        0,    // new_input_min
        1,    // new_input_max
        -1,   // new_output_min
        1     // new_output_max
    );

    // Trainingsdaten skalieren
    if (fann_scale_train($ann, $train_data)) {
        echo "Trainingsdaten erfolgreich skaliert.\n";

        // Netz mit skalierten Daten trainieren
        fann_train_on_data($ann, $train_data, 1000, 100, 0.0001);

        echo "Training abgeschlossen.\n";
    } else {
        echo "Fehler beim Skalieren der Trainingsdaten.\n";
    }

    fann_destroy_train($train_data);
    fann_destroy($ann);
}
?>
Trainingsdaten erfolgreich skaliert. Training abgeschlossen.

Skalieren und anschließendes Descalen von Ausgabewerten

<?php
$ann = fann_create_standard(3, 2, 4, 1);
$train_data = fann_read_train_from_file('regression.data');

if ($ann && $train_data) {
    // Skalierungsparameter setzen
    fann_set_scaling_params($ann, $train_data, -1, 1, -1, 1);

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

    // Netz trainieren
    fann_train_on_data($ann, $train_data, 500, 0, 0.001);

    // Netz für einen neuen (ebenfalls zu skalierenden) Eingabevektor verwenden
    $input = [0.5, 0.8];
    fann_scale_input($ann, $input);
    $output = fann_run($ann, $input);

    // Ausgabe zurückskalieren in den Originalwertebereich
    fann_descale_output($ann, $output);

    echo "Skalierter Ausgabewert: " . $output[0] . "\n";

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

// Wichtig · Fallstricke

Achtung: fann_scale_train verändert den Trainings-Datensatz dauerhaft in-place. Wenn die Originalwerte noch benötigt werden, sollte eine Kopie des Datensatzes erstellt oder die Originalwerte anderweitig gespeichert werden.

Die Skalierungsparameter müssen vor dem Aufruf von fann_scale_train mit fann_set_scaling_params gesetzt werden. Andernfalls schlägt die Funktion fehl und gibt false zurück.

Diese Funktion ist Teil der FANN-Extension (Fast Artificial Neural Network Library) und steht nur zur Verfügung, wenn PHP mit der fann-Extension kompiliert wurde. Sie ist nicht in PHP-Standard-Installationen enthalten.