Signatur
Beschreibung
fann_set_scaling_params analysiert die Trainingsdaten in $train_data und berechnet daraus die Skalierungsparameter für das neuronale Netz $ann. Diese Parameter werden intern gespeichert und können anschließend mit fann_scale_input, fann_scale_output bzw. fann_scale_train angewendet werden.
Skalierung ist in der Praxis essenziell, um Eingabe- und Ausgabewerte in einen definierten Wertebereich zu normalisieren (z. B. -1 bis 1 oder 0 bis 1). Dadurch wird das Training neuronaler Netze beschleunigt und die Konvergenz verbessert, da alle Merkmale auf einer vergleichbaren Skala liegen.
Die Parameter $new_input_min, $new_input_max, $new_output_min und $new_output_max definieren den Zielwertebereich, in den die Original-Daten linear transformiert werden sollen. Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP.
Diese Funktion ist besonders dann sinnvoll, wenn die Rohdaten stark unterschiedliche Wertebereiche aufweisen, da ohne Normalisierung einzelne Merkmale das Training dominieren könnten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine FANN-Netz-Ressource, wie sie von fann_create_standard oder ähnlichen Funktionen zurückgegeben wird. |
|
| $train_data Pflicht | resource | Eine FANN-Trainingsdaten-Ressource, wie sie von fann_read_train_from_file oder fann_create_train_from_callback erzeugt wird. Auf Basis dieser Daten werden die Skalierungsparameter berechnet. |
|
| $new_input_min Pflicht | int | Der gewünschte minimale Wert für die skalierten Eingabedaten (z. B. -1 oder 0). |
|
| $new_input_max Pflicht | int | Der gewünschte maximale Wert für die skalierten Eingabedaten (z. B. 1). |
|
| $new_output_min Pflicht | int | Der gewünschte minimale Wert für die skalierten Ausgabedaten (z. B. -1 oder 0). |
|
| $new_output_max Pflicht | int | Der gewünschte maximale Wert für die skalierten Ausgabedaten (z. B. 1). |
Rückgabewert
true zurück, wenn die Skalierungsparameter erfolgreich berechnet und gesetzt wurden. Bei einem Fehler (z. B. ungültige Ressource) wird false zurückgegeben.Beispiele
Skalierungsparameter setzen und Trainingsdaten skalieren
<?php
// Neuronales Netz mit 2 Eingabe-, 3 versteckten und 1 Ausgabe-Neuron erstellen
$ann = fann_create_standard(3, 2, 3, 1);
// Trainingsdaten aus Datei laden
$train_data = fann_read_train_from_file('training.data');
if ($ann && $train_data) {
// Skalierungsparameter für Eingabe und Ausgabe berechnen
// Eingabe wird auf [-1, 1] skaliert, Ausgabe auf [-1, 1]
if (fann_set_scaling_params($ann, $train_data, -1, 1, -1, 1)) {
echo "Skalierungsparameter erfolgreich gesetzt." . PHP_EOL;
// Trainingsdaten skalieren
fann_scale_train($ann, $train_data);
// Netz trainieren
fann_train_on_data($ann, $train_data, 1000, 100, 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);
}
?>
Skalierung mit anschließender Vorhersage anwenden
<?php
// Gespeichertes Netz laden
$ann = fann_create_from_file('trained_network.net');
$train_data = fann_read_train_from_file('training.data');
if ($ann && $train_data) {
// Skalierungsparameter auf Basis der Trainingsdaten neu setzen
fann_set_scaling_params($ann, $train_data, -1, 1, -1, 1);
// Eingabewerte für die Vorhersage
$input = [0.5, 0.8];
// Eingabe skalieren, bevor sie dem Netz übergeben wird
fann_scale_input_train_data($train_data, -1, 1);
// Vorhersage berechnen
$result = fann_run($ann, $input);
// Ausgabe zurück-skalieren
fann_descale_output($ann, $result);
echo "Vorhersage (rückskaliert): " . $result[0] . PHP_EOL;
fann_destroy_train($train_data);
fann_destroy($ann);
}
?>
// Wichtig · Fallstricke
Wichtig: Die Skalierungsparameter müssen vor jedem Training und vor jeder Vorhersage konsistent angewendet werden. Werden die Eingabedaten vor dem Training skaliert, müssen Eingaben zur Vorhersagezeit ebenfalls mit fann_scale_input skaliert und die Ausgabe mit fann_descale_output wieder in den ursprünglichen Wertebereich zurücktransformiert werden.
Erweiterungsabhängigkeit: Diese Funktion ist nur verfügbar, wenn die PHP-FANN-Erweiterung (php-fann) installiert und aktiviert ist. Sie ist nicht Teil der Standard-PHP-Installation.
Die Verwendung eines symmetrischen Wertebereichs wie -1 bis 1 empfiehlt sich bei Aktivierungsfunktionen wie FANN_SIGMOID_SYMMETRIC, während 0 bis 1 für FANN_SIGMOID geeigneter ist.