Signatur
Beschreibung
fann_set_training_algorithm legt fest, welcher Algorithmus beim Trainieren eines neuronalen Netzes mit der FANN-Bibliothek (Fast Artificial Neural Network) verwendet wird. Der gewählte Algorithmus beeinflusst maßgeblich die Konvergenzgeschwindigkeit und die Qualität des trainierten Netzes.
Zur Verfügung stehen folgende Konstanten als Wert für training_algorithm:
FANN_TRAIN_INCREMENTAL– Inkrementelles (Online-)Training: Gewichte werden nach jedem einzelnen Trainingsmuster aktualisiert.FANN_TRAIN_BATCH– Batch-Training: Gewichte werden erst nach einem vollständigen Durchlauf über alle Trainingsmuster aktualisiert.FANN_TRAIN_RPROP– Resilient Backpropagation (Standardwert): Ein robuster Algorithmus, der in den meisten Fällen gute Ergebnisse liefert.FANN_TRAIN_QUICKPROP– QuickProp: Ein schneller Algorithmus, der eine Annäherung zweiter Ordnung verwendet.FANN_TRAIN_SARPROP– SARProp: Eine Weiterentwicklung von RProp mit adaptiver Lernrate (verfügbar ab FANN 2.2).
Die Wahl des Algorithmus sollte auf die Problemstellung abgestimmt sein. Für die meisten Aufgaben ist FANN_TRAIN_RPROP ein guter Ausgangspunkt. FANN_TRAIN_INCREMENTAL eignet sich besonders für Online-Lernen oder sehr große Datensätze, während FANN_TRAIN_BATCH stabilere Gradienten liefert.
Die Funktion gehört zur FANN-Erweiterung (php-fann), die separat installiert werden muss. Der aktuelle Algorithmus kann mit fann_get_training_algorithm abgefragt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine gültige FANN-Ressource, die zuvor mit Funktionen wie fann_create_standard oder fann_create_from_file erzeugt wurde. |
|
| $training_algorithm Pflicht | int | Eine der FANN-Konstanten für den Trainingsalgorithmus: FANN_TRAIN_INCREMENTAL, FANN_TRAIN_BATCH, FANN_TRAIN_RPROP, FANN_TRAIN_QUICKPROP oder FANN_TRAIN_SARPROP. |
Rückgabewert
true zurück, wenn der Trainingsalgorithmus erfolgreich gesetzt wurde, andernfalls false (z. B. wenn eine ungültige FANN-Ressource übergeben wurde).Beispiele
Trainingsalgorithmus auf RPROP setzen und Netz trainieren
<?php
// Neuronales Netz mit 2 Eingaben, 1 versteckter Schicht (3 Neuronen) und 1 Ausgabe erstellen
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann) {
// Trainingsalgorithmus auf Resilient Backpropagation setzen
if (fann_set_training_algorithm($ann, FANN_TRAIN_RPROP)) {
echo "Trainingsalgorithmus erfolgreich gesetzt: ";
echo fann_get_training_algorithm($ann) . PHP_EOL;
} else {
echo "Fehler beim Setzen des Trainingsalgorithmus." . PHP_EOL;
}
// Netz mit Trainingsdaten trainieren
$train_data = fann_read_train_from_file('xor.data');
if ($train_data) {
fann_train_on_data($ann, $train_data, 1000, 10, 0.001);
fann_save($ann, 'xor_trained.net');
fann_destroy_train($train_data);
}
fann_destroy($ann);
}
Vergleich verschiedener Trainingsalgorithmen
<?php
$algorithmen = [
FANN_TRAIN_INCREMENTAL => 'FANN_TRAIN_INCREMENTAL',
FANN_TRAIN_BATCH => 'FANN_TRAIN_BATCH',
FANN_TRAIN_RPROP => 'FANN_TRAIN_RPROP',
FANN_TRAIN_QUICKPROP => 'FANN_TRAIN_QUICKPROP',
];
$ann = fann_create_standard(3, 2, 4, 1);
if ($ann) {
foreach ($algorithmen as $konstante => $name) {
$ergebnis = fann_set_training_algorithm($ann, $konstante);
$aktuell = fann_get_training_algorithm($ann);
printf(
"Setze %s: %s (aktuell: %d)\n",
$name,
$ergebnis ? 'OK' : 'FEHLER',
$aktuell
);
}
fann_destroy($ann);
}
// Wichtig · Fallstricke
Erweiterung erforderlich: Die FANN-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL (pecl install fann) oder die Paketverwaltung des Betriebssystems installiert werden.
Algorithmuswahl: Der Standardalgorithmus ist FANN_TRAIN_RPROP (Wert 2). Dieser sollte als erster Versuch gewählt werden. FANN_TRAIN_QUICKPROP kann bei bestimmten Problemen schneller konvergieren, ist aber empfindlicher gegenüber den gewählten Lernparametern.
Lernparameter anpassen: Nach dem Wechsel des Algorithmus sollten die zugehörigen Lernparameter (z. B. Lernrate via fann_set_learning_rate) überprüft und ggf. angepasst werden, da unterschiedliche Algorithmen andere optimale Parameterwerte benötigen.