Signatur
Beschreibung
fann_scale_output_train_data gehört zur FANN-Erweiterung (Fast Artificial Neural Network) für PHP und normalisiert ausschließlich die Ausgabewerte eines Trainingsdatensatzes auf einen frei wählbaren Zielbereich. Die Eingabewerte des Datensatzes bleiben unverändert.
Die Skalierung ist ein wesentlicher Vorverarbeitungsschritt beim Training neuronaler Netze. Wenn die Ausgabeneuronen Aktivierungsfunktionen verwenden, die nur in einem bestimmten Wertebereich ausgeben (z. B. Sigmoid: [0, 1] oder Tangens-Hyperbolicus: [−1, 1]), müssen die Trainingsziele in denselben Bereich überführt werden, damit das Training konvergiert und der Fehler aussagekräftig ist.
Im Gegensatz zu fann_scale_train_data, das sowohl Eingaben als auch Ausgaben skaliert, und fann_scale_input_train_data, das nur Eingaben skaliert, wirkt diese Funktion selektiv nur auf die Ausgabeseite. Das ermöglicht eine feingranulare Kontrolle, wenn Eingabe- und Ausgabedaten unterschiedliche Skalierungsstrategien erfordern.
Die Funktion verändert den übergebenen Trainingsdatensatz in-place. Der Datensatz muss zuvor mit fann_read_train_from_file oder fann_create_train erstellt worden sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $train_data Pflicht | resource | Eine gültige FANN-Trainingsdaten-Ressource, wie sie von fann_read_train_from_file() oder fann_create_train() zurückgegeben wird. |
|
| $new_min Pflicht | float | Der neue Minimalwert des Ausgabebereichs nach der Skalierung, z. B. -1.0 oder 0.0. |
|
| $new_max Pflicht | float | Der neue Maximalwert des Ausgabebereichs nach der Skalierung, z. B. 1.0. |
Rückgabewert
true zurück, wenn die Skalierung erfolgreich war, andernfalls false (z. B. bei einer ungültigen Ressource oder wenn new_min >= new_max).Beispiele
Ausgaben eines Trainingsdatensatzes auf [0, 1] skalieren
<?php
// Trainingsdaten aus Datei laden
$train_data = fann_read_train_from_file('training.data');
if ($train_data) {
// Nur die Ausgabewerte auf den Bereich [0.0, 1.0] skalieren
// passend für Sigmoid-Aktivierungsfunktion
$result = fann_scale_output_train_data($train_data, 0.0, 1.0);
if ($result) {
echo "Ausgaben erfolgreich auf [0, 1] skaliert." . PHP_EOL;
} else {
echo "Skalierung fehlgeschlagen." . PHP_EOL;
}
fann_destroy_train($train_data);
} else {
echo "Trainingsdaten konnten nicht geladen werden." . PHP_EOL;
}
Getrennte Skalierung von Eingaben und Ausgaben
<?php
// Trainingsdaten laden
$train_data = fann_read_train_from_file('sensor_data.data');
if ($train_data) {
// Eingaben auf [-1, 1] skalieren (z. B. für tanh-Aktivierung in der Eingabeschicht)
fann_scale_input_train_data($train_data, -1.0, 1.0);
// Ausgaben auf [0, 1] skalieren (z. B. für Sigmoid-Aktivierung in der Ausgabeschicht)
fann_scale_output_train_data($train_data, 0.0, 1.0);
echo "Eingaben und Ausgaben getrennt skaliert." . PHP_EOL;
// Netz erstellen und trainieren
$ann = fann_create_standard(3, 4, 6, 1);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID);
fann_train_on_data($ann, $train_data, 500, 10, 0.001);
fann_destroy($ann);
fann_destroy_train($train_data);
}
// Wichtig · Fallstricke
In-place-Änderung: Die Funktion verändert den Trainingsdatensatz direkt. Soll der Originaldatensatz erhalten bleiben, muss er vorher kopiert oder erneut geladen werden.
Bereichsgrenzen: new_min muss strikt kleiner als new_max sein, sonst schlägt die Funktion fehl. Eine Überprüfung der Eingabewerte vor dem Aufruf ist ratsam.
Abhängigkeit: Diese Funktion steht nur zur Verfügung, wenn PHP mit der FANN-Erweiterung kompiliert wurde (pecl install fann). Die FANN-Bibliothek muss auf dem System installiert sein.
Konsistenz beim Inferenz: Wenn die Ausgaben der Trainingsdaten skaliert wurden, müssen die Vorhersagen des trainierten Netzes mit derselben inversen Skalierung zurücktransformiert werden, um sinnvolle Ergebnisse zu erhalten.