Start · Sprachen · PHP · Referenz · fann_set_input_scaling_params

fann_set_input_scaling_params

Funktion

Berechnet und setzt die Eingabe-Skalierungsparameter eines neuronalen Netzes anhand der vorhandenen Trainingsdaten.

Kategorie: misc

Signatur

fann_set_input_scaling_params(resource $ann, resource $train_data, float $new_input_min, float $new_input_max): bool

Beschreibung

fann_set_input_scaling_params() analysiert die Eingabedaten eines FANN-Trainingsdatensatzes und berechnet daraus die Skalierungsparameter für die Eingabeschicht des neuronalen Netzes. Die berechneten Parameter sorgen dafür, dass alle Eingabewerte beim späteren Aufruf von fann_scale_input() oder fann_scale_train() auf den angegebenen Bereich [new_input_min, new_input_max] normiert werden.

Skalierung ist ein wichtiger Vorverarbeitungsschritt beim Training neuronaler Netze: Liegen die Eingabewerte in sehr unterschiedlichen Wertebereichen, kann das Training instabil werden oder deutlich langsamer konvergieren. Durch eine einheitliche Normierung – häufig auf [0, 1] oder [-1, 1] – lernt das Netz effizienter.

Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP und ist besonders dann sinnvoll, wenn man mit realen Datensätzen arbeitet, deren Wertebereiche vorab nicht exakt bekannt sind. Die Skalierungsparameter werden intern im $ann-Objekt gespeichert und bei nachfolgenden Skalierungsoperationen automatisch verwendet.

Nach dem Setzen der Parameter können Eingaben mit fann_scale_input() skaliert und mit fann_descale_input() wieder in den Originalbereich zurückgeführt werden.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Ein gültiges FANN-Netzwerk-Handle, das zuvor mit fann_create_standard() oder einer ähnlichen Funktion erzeugt wurde.
$train_data Pflicht resource Ein gültiges FANN-Trainingsdaten-Handle, aus dem die minimalen und maximalen Eingabewerte für jeden Eingang ermittelt werden. Wird z. B. mit fann_read_train_from_file() geladen.
$new_input_min Pflicht float Der gewünschte Minimalwert des Zielbereichs, auf den alle Eingaben skaliert werden sollen (z. B. -1.0 oder 0.0).
$new_input_max Pflicht float Der gewünschte Maximalwert des Zielbereichs, auf den alle Eingaben skaliert werden sollen (z. B. 1.0).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Skalierungsparameter erfolgreich berechnet und gesetzt wurden, andernfalls false.

Beispiele

Eingabe-Skalierungsparameter aus Trainingsdaten setzen

<?php
// Neuronales Netz mit 2 Eingängen, einer versteckten Schicht (3 Neuronen) und 1 Ausgang erzeugen
$ann = fann_create_standard(3, 2, 3, 1);

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

if ($ann && $train_data) {
    // Eingabe-Skalierungsparameter auf den Bereich [-1, 1] setzen
    if (fann_set_input_scaling_params($ann, $train_data, -1.0, 1.0)) {
        echo "Eingabe-Skalierungsparameter erfolgreich gesetzt." . PHP_EOL;

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

        // Netz trainieren
        fann_train_on_data($ann, $train_data, 1000, 10, 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);
}
Eingabe-Skalierungsparameter erfolgreich gesetzt.

Kombination mit Ausgabe-Skalierung für vollständige Normierung

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

if ($ann && $train_data) {
    // Eingaben auf [0, 1] normieren
    $inputOk = fann_set_input_scaling_params($ann, $train_data, 0.0, 1.0);
    // Ausgaben ebenfalls auf [0, 1] normieren
    $outputOk = fann_set_output_scaling_params($ann, $train_data, 0.0, 1.0);

    if ($inputOk && $outputOk) {
        echo "Eingangs- und Ausgangs-Skalierung gesetzt." . PHP_EOL;

        // Gesamten Trainingsdatensatz skalieren
        fann_scale_train($ann, $train_data);

        fann_train_on_data($ann, $train_data, 500, 10, 0.0001);
        echo "Training abgeschlossen." . PHP_EOL;
    }

    fann_destroy_train($train_data);
    fann_destroy($ann);
}
Eingangs- und Ausgangs-Skalierung gesetzt. Training abgeschlossen.

// Wichtig · Fallstricke

Erweiterung erforderlich: Diese Funktion steht nur zur Verfügung, wenn PHP mit der FANN-Erweiterung kompiliert wurde (pecl install fann). Prüfe die Verfügbarkeit mit extension_loaded('fann').

Reihenfolge beachten: Die Skalierungsparameter müssen vor dem Aufruf von fann_scale_train() oder fann_scale_input() gesetzt werden, da die Skalierung intern auf den gespeicherten Parametern basiert.

Konsistenz beim Inferieren: Wenn das gespeicherte Netz später für Vorhersagen geladen wird, müssen Eingabewerte mit denselben Skalierungsparametern normiert werden. Es empfiehlt sich, die ursprünglichen Min-/Max-Werte der Trainingsdaten separat zu speichern, um auch produktive Eingaben korrekt skalieren zu können.