Signatur
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
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 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);
}
?>
// 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.