Start · Sprachen · PHP · Referenz · fann_scale_train_data

fann_scale_train_data

Funktion

Skaliert alle Ein- und Ausgabewerte in einem FANN-Trainingsdatensatz auf einen angegebenen Wertebereich.

seit PHP 5.3.0 Kategorie: misc

Signatur

fann_scale_train_data(resource $train_data, float $new_min, float $new_max): bool

Beschreibung

fann_scale_train_data() normalisiert sämtliche Eingabe- und Ausgabewerte eines FANN-Trainingsdatensatzes linear auf den Bereich zwischen new_min und new_max. Die Skalierung erfolgt anhand der tatsächlichen Minimal- und Maximalwerte, die im gesamten Trainingsdatensatz vorkommen.

Diese Vorverarbeitung ist ein wichtiger Schritt beim Training neuronaler Netze: Nicht skalierte Daten mit sehr unterschiedlichen Wertebereichen können dazu führen, dass das Netz langsam oder gar nicht konvergiert. Typische Zielbereiche sind [0, 1] oder [-1, 1].

Die Funktion arbeitet direkt auf dem übergebenen Trainingsdatensatz und verändert ihn in-place. Sie sollte aufgerufen werden, nachdem die Trainingsdaten mit fann_read_train_from_file() oder fann_create_train() geladen bzw. erzeugt wurden und bevor das Training mit fann_train_on_data() beginnt.

Beachte, dass Ein- und Ausgaben gemeinsam auf denselben Bereich skaliert werden. Falls eine getrennte Skalierung gewünscht wird, stehen fann_scale_input_train_data() und fann_scale_output_train_data() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$train_data Pflicht resource Ein gültiges FANN-Trainingsdaten-Ressource-Handle, wie es von fann_read_train_from_file() oder fann_create_train() zurückgegeben wird.
$new_min Pflicht float Der neue Minimalwert, auf den die Daten skaliert werden sollen. Typischerweise 0.0 oder -1.0.
$new_max Pflicht float Der neue Maximalwert, auf den die Daten skaliert werden sollen. Typischerweise 1.0.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Skalierung erfolgreich war, oder false im Fehlerfall (z. B. ungültiger Trainingsdatensatz).

Beispiele

Trainingsdaten auf [-1, 1] skalieren und Netz trainieren

<?php
// Trainingsdaten aus Datei laden
$train_data = fann_read_train_from_file('meine_daten.data');

if ($train_data) {
    // Alle Ein- und Ausgaben auf den Bereich [-1, 1] skalieren
    if (fann_scale_train_data($train_data, -1.0, 1.0)) {
        echo "Trainingsdaten erfolgreich skaliert." . PHP_EOL;
    } else {
        echo "Fehler beim Skalieren." . PHP_EOL;
    }

    // Netz erstellen und trainieren
    $ann = fann_create_standard(3, 2, 4, 1);
    fann_train_on_data($ann, $train_data, 1000, 10, 0.001);

    fann_save($ann, 'mein_netz.net');
    fann_destroy($ann);
    fann_destroy_train($train_data);
} else {
    echo "Konnte Trainingsdaten nicht laden." . PHP_EOL;
}
?>
Trainingsdaten erfolgreich skaliert.

Trainingsdaten auf [0, 1] skalieren (typisch für Sigmoid-Aktivierung)

<?php
$train_data = fann_read_train_from_file('xor.data');

if ($train_data) {
    // Skalierung auf [0, 1] passend für logistische Sigmoid-Funktion
    fann_scale_train_data($train_data, 0.0, 1.0);

    $num_input  = fann_num_input_train_data($train_data);
    $num_output = fann_num_output_train_data($train_data);
    $num_data   = fann_length_train_data($train_data);

    echo "Eingaben: $num_input, Ausgaben: $num_output, Datensätze: $num_data" . PHP_EOL;

    $ann = fann_create_standard(3, $num_input, 3, $num_output);
    fann_set_activation_function_hidden($ann, FANN_SIGMOID);
    fann_set_activation_function_output($ann, FANN_SIGMOID);
    fann_train_on_data($ann, $train_data, 500, 0, 0.001);

    fann_destroy($ann);
    fann_destroy_train($train_data);
}
?>
Eingaben: 2, Ausgaben: 1, Datensätze: 4

// Wichtig · Fallstricke

Achtung: Die Skalierung verändert den Trainingsdatensatz direkt in-place. Wird das ursprüngliche Datenmaterial noch an anderer Stelle benötigt, sollte vorher eine Kopie mit fann_duplicate_train_data() erstellt werden.

Konsistenz: Wenn die Trainingsdaten skaliert wurden, müssen Eingabedaten zur Inferenzzeit auf dieselbe Art skaliert werden – andernfalls liefert das Netz falsche Ergebnisse. Speichere daher die verwendeten Skalierungsparameter (Originalmin/-max sowie new_min/new_max).

Die FANN-Erweiterung (Fast Artificial Neural Network) muss in PHP kompiliert und aktiviert sein (extension=fann). Sie ist nicht Teil der PHP-Standardinstallation und muss über PECL installiert werden.