Signatur
Beschreibung
fann_shuffle_train_data() mischt die in einem FANN-Trainingsdatensatz enthaltenen Trainingsbeispiele zufällig durch. Dies ist nützlich, um beim Training Neuronaler Netze eine bessere Generalisierung zu erzielen, da viele Lernalgorithmen empfindlich auf die Reihenfolge reagieren, in der Trainingsbeispiele präsentiert werden.
Werden Trainingsbeispiele immer in derselben Reihenfolge eingespielt, kann das Netz dazu neigen, Muster in der Reihenfolge zu lernen, anstatt echte Zusammenhänge zu erkennen. Das Mischen vor jedem Trainingsschritt oder zwischen mehreren Trainingsläufen vermindert diesen Effekt erheblich.
Die Funktion ist Bestandteil der FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP. Sie arbeitet direkt auf dem übergebenen Trainings-Ressource-Objekt und verändert dessen interne Reihenfolge dauerhaft – es wird keine Kopie erstellt.
- Besonders relevant für Batch-Lernverfahren und iteratives Training über mehrere Epochen.
- Kombinierbar mit
fann_train_on_data()oderfann_train_epoch(), um pro Epoche eine neue Reihenfolge zu nutzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $train_data Pflicht | resource | Eine gültige FANN-Trainingsdaten-Ressource, wie sie z. B. von fann_read_train_from_file() oder fann_create_train_from_callback() zurückgegeben wird. |
Rückgabewert
true zurück, wenn das Mischen erfolgreich war, andernfalls false (z. B. bei einer ungültigen Ressource).Beispiele
Trainingsdaten mischen vor dem Training
<?php
// FANN-Trainingsdaten aus Datei laden
$train_data = fann_read_train_from_file('meine_trainingsdaten.data');
if ($train_data === false) {
die('Trainingsdaten konnten nicht geladen werden.');
}
// Trainingsdaten in zufällige Reihenfolge bringen
if (fann_shuffle_train_data($train_data)) {
echo 'Trainingsdaten erfolgreich gemischt.' . PHP_EOL;
} else {
echo 'Fehler beim Mischen der Trainingsdaten.' . PHP_EOL;
}
// Neuronales Netz erstellen und trainieren
$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);
Mischen pro Epoche für bessere Generalisierung
<?php
$train_data = fann_read_train_from_file('xor.data');
$ann = fann_create_standard(3, 2, 3, 1);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
$epochen = 500;
for ($i = 0; $i < $epochen; $i++) {
// Vor jeder Epoche neu mischen
fann_shuffle_train_data($train_data);
$fehler = fann_train_epoch($ann, $train_data);
if ($i % 100 === 0) {
echo "Epoche $i: MSE = $fehler" . PHP_EOL;
}
}
fann_save($ann, 'trainiertes_netz.net');
fann_destroy_train($train_data);
fann_destroy($ann);
// Wichtig · Fallstricke
Achtung: Die Funktion verändert den Trainingsdatensatz in-place – die ursprüngliche Reihenfolge der Trainingsbeispiele geht verloren. Wird die originale Reihenfolge für spätere Zwecke benötigt, sollte vorher eine Kopie mit fann_duplicate_train_data() erstellt werden.
Die FANN-PHP-Erweiterung muss separat installiert sein (pecl install fann). Sie ist nicht standardmäßig in PHP enthalten. Ab PHP 8.x ist die Erweiterung möglicherweise nicht offiziell gepflegt – die Kompatibilität sollte vor dem Einsatz geprüft werden.