Signatur
Beschreibung
fann_scale_input_train_data() gehört zur FANN-Erweiterung (Fast Artificial Neural Network) und normalisiert sämtliche Eingabewerte eines Trainingsdatensatzes auf ein einheitliches Intervall zwischen new_min und new_max. Dies ist ein üblicher Vorverarbeitungsschritt beim Training neuronaler Netze.
Die Skalierung der Eingangsdaten sorgt dafür, dass alle Features in einem vergleichbaren Wertebereich liegen, was den Lernprozess stabilisiert und die Konvergenzgeschwindigkeit erhöht. Typische Zielbereiche sind [0.0, 1.0] oder [-1.0, 1.0], abhängig von der verwendeten Aktivierungsfunktion des Netzes.
Die Funktion verändert den übergebenen Trainingsdatensatz direkt (in-place). Sie wirkt ausschließlich auf die Eingabewerte des Datensatzes; um auch die Ausgabewerte zu skalieren, muss fann_scale_output_train_data() zusätzlich aufgerufen werden.
Diese Funktion steht nur zur Verfügung, wenn die FANN-Erweiterung installiert und aktiviert ist. Sie ist insbesondere dann nützlich, wenn Rohdaten aus verschiedenen Quellen mit unterschiedlichen Skalen in einem Netz verarbeitet werden sollen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $train_data Pflicht | resource | Eine FANN-Trainingsdaten-Ressource, wie sie z. B. von fann_read_train_from_file() oder fann_create_train_from_callback() zurückgegeben wird. |
|
| $new_min Pflicht | float | Der neue minimale Wert, auf den die Eingabedaten skaliert werden sollen, z. B. -1.0 oder 0.0. |
|
| $new_max Pflicht | float | Der neue maximale Wert, auf den die Eingabedaten skaliert werden sollen, z. B. 1.0. |
Rückgabewert
true zurück, wenn die Skalierung erfolgreich durchgeführt wurde, oder false bei einem Fehler (z. B. ungültige Ressource oder Bereichsangabe).Beispiele
Eingabedaten auf den Bereich [0.0, 1.0] skalieren
<?php
// Trainingsdaten aus einer Datei laden
$train_data = fann_read_train_from_file('train.data');
if ($train_data) {
// Eingaben auf [0.0, 1.0] normalisieren
$result = fann_scale_input_train_data($train_data, 0.0, 1.0);
if ($result) {
echo "Eingabedaten erfolgreich skaliert." . PHP_EOL;
} else {
echo "Fehler beim Skalieren der Eingabedaten." . PHP_EOL;
}
// Trainingsdaten anschließend zum Training verwenden
$ann = fann_create_standard(3, 2, 3, 1);
fann_train_on_data($ann, $train_data, 1000, 10, 0.001);
fann_destroy_train($train_data);
fann_destroy($ann);
} else {
echo "Trainingsdaten konnten nicht geladen werden." . PHP_EOL;
}
?>
Eingaben und Ausgaben gemeinsam skalieren (symmetrischer Bereich)
<?php
// Trainingsdaten laden
$train_data = fann_read_train_from_file('train.data');
if ($train_data) {
// Eingaben auf [-1.0, 1.0] skalieren (geeignet für tanh-Aktivierung)
fann_scale_input_train_data($train_data, -1.0, 1.0);
// Ausgaben ebenfalls auf [-1.0, 1.0] skalieren
fann_scale_output_train_data($train_data, -1.0, 1.0);
echo "Eingaben und Ausgaben auf [-1, 1] skaliert." . PHP_EOL;
fann_destroy_train($train_data);
}
?>
// Wichtig · Fallstricke
In-place-Veränderung: Die Funktion verändert den Trainingsdatensatz direkt. Es empfiehlt sich, eine Kopie der Originaldaten zu speichern, falls die unskalierte Version noch benötigt wird.
Bereichswahl: Der gewählte Zielbereich sollte zur Aktivierungsfunktion des Netzes passen. Für FANN_SIGMOID eignet sich [0.0, 1.0], für FANN_SIGMOID_SYMMETRIC (tanh) ist [-1.0, 1.0] besser geeignet.
Nur Eingaben: Diese Funktion skaliert ausschließlich die Eingabewerte. Für die Ausgabewerte muss fann_scale_output_train_data() separat aufgerufen werden. Um beide gleichzeitig zu skalieren, kann alternativ fann_scale_train_data() verwendet werden.