Start · Sprachen · PHP · Referenz · fann_scale_input

fann_scale_input

Funktion

Skaliert die Werte im Eingabevektor anhand zuvor berechneter Skalierungsparameter, bevor der Vektor an das neuronale Netzwerk übergeben wird.

Kategorie: misc

Signatur

fann_scale_input(resource $ann, array &$input_vector): bool

Beschreibung

fann_scale_input skaliert einen Eingabevektor auf Basis von Parametern, die zuvor mit Funktionen wie fann_set_scaling_params oder fann_calculate_mean_stddev_from_file berechnet wurden. Dies ist ein notwendiger Vorverarbeitungsschritt, wenn das Netzwerk mit skalierten Trainingsdaten trainiert wurde.

Neuronale Netze arbeiten am zuverlässigsten, wenn alle Eingabewerte in einem ähnlichen numerischen Bereich liegen (z. B. zwischen 0 und 1 oder –1 und 1). Ohne diese Normalisierung können Merkmale mit großen Wertebereichs-Unterschieden das Lernverhalten stark verzerren. fann_scale_input automatisiert diese Transformation zur Laufzeit.

Die Funktion modifiziert den übergebenen Eingabevektor direkt (pass-by-reference). Sie sollte unmittelbar vor dem Aufruf von fann_run eingesetzt werden, um sicherzustellen, dass die Eingabedaten im selben Wertebereich liegen wie die Trainingsdaten.

Diese Funktion ist nur verfügbar, wenn PHP mit der FANN-Erweiterung kompiliert wurde (PECL-Paket fann).

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netzwerk-Ressource, die zuvor mit fann_create_standard oder einer ähnlichen Funktion erstellt und mit Skalierungsparametern versehen wurde.
$input_vector Pflicht array Ein Array mit den rohen Eingabewerten, das direkt modifiziert wird. Die Anzahl der Elemente muss der Anzahl der Eingabeneuronen des Netzwerks entsprechen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Skalierung erfolgreich durchgeführt wurde, andernfalls false (z. B. wenn keine Skalierungsparameter gesetzt wurden oder die Vektorgröße nicht zur Netzwerkstruktur passt).

Beispiele

Eingabevektor vor der Netzwerkabfrage skalieren

<?php
// Netzwerk aus Datei laden
$ann = fann_create_from_file('mein_netzwerk.net');

if (!$ann) {
    die('Netzwerk konnte nicht geladen werden.');
}

// Skalierungsparameter festlegen
// Eingabe: min -1000, max 1000 → skaliert auf 0.0 bis 1.0
// Ausgabe: min 0, max 1
fann_set_scaling_params($ann, null, 0.0, 1.0, 0.0, 1.0);

// Roher Eingabevektor
$input = [500.0, -200.0, 750.0];

// Vektor skalieren
if (fann_scale_input($ann, $input)) {
    echo 'Skalierter Vektor: ';
    print_r($input);

    // Nun das Netzwerk mit dem skalierten Vektor abfragen
    $output = fann_run($ann, $input);
    print_r($output);
} else {
    echo 'Skalierung fehlgeschlagen.';
}

fann_destroy($ann);
?>
Skalierter Vektor: Array ( [0] => 0.75 [1] => 0.4 [2] => 0.875 )

Kombination mit Trainings-Skalierungsparametern aus Datei

<?php
// Netzwerk und Trainingsdaten laden
$ann       = fann_create_from_file('klassifikation.net');
$train     = fann_read_train_from_file('trainingsdaten.data');

// Skalierungsparameter aus Trainingsdaten berechnen
fann_set_scaling_params($ann, $train, 0.0, 1.0, 0.0, 1.0);

// Neue Rohdaten aus der Anwendung
$rohdaten = [42.5, 18.3, 99.1];

// Eingabe skalieren
fann_scale_input($ann, $rohdaten);

// Abfrage starten
$ergebnis = fann_run($ann, $rohdaten);
echo 'Klassifikation: ' . ($ergebnis[0] > 0.5 ? 'Ja' : 'Nein') . PHP_EOL;

fann_destroy_train($train);
fann_destroy($ann);
?>
Klassifikation: Ja

// Wichtig · Fallstricke

Wichtig: Die Skalierung muss konsistent zwischen Training und Inferenz sein. Wenn das Netzwerk mit skalierten Trainingsdaten (via fann_scale_train) trainiert wurde, müssen auch alle späteren Eingaben mit denselben Parametern skaliert werden, bevor fann_run aufgerufen wird – andernfalls liefert das Netzwerk unbrauchbare Ergebnisse ohne Fehlermeldung.

Da $input_vector per Referenz übergeben wird, verändert die Funktion das originale Array. Falls die unveränderten Rohdaten noch benötigt werden, sollte vor dem Aufruf eine Kopie erstellt werden.

Diese Funktion setzt voraus, dass die FANN-Erweiterung installiert ist (pecl install fann). Sie ist nicht Teil des PHP-Kerns.