Start · Sprachen · PHP · Referenz · fann_train

fann_train

Funktion

Trainiert ein künstliches neuronales Netz mit einem einzelnen Datensatz (Eingabe + gewünschte Ausgabe) für eine Trainingsiteration.

Kategorie: misc

Signatur

fann_train(resource $ann, array $input, array $desired_output): bool

Beschreibung

fann_train führt eine einzelne Trainingsiteration auf einem neuronalen Netz durch. Dabei wird dem Netz ein Eingabe-Vektor präsentiert, die Ausgabe wird berechnet und anschließend der Fehler gegenüber dem gewünschten Ausgabe-Vektor ermittelt. Das Netz passt seine Gewichte entsprechend dem konfigurierten Trainingsalgorithmus an.

Diese Funktion ist besonders nützlich, wenn du das Training manuell steuern möchtest, zum Beispiel um eigene Abbruchbedingungen, Logging oder adaptives Lernen zu implementieren. Im Gegensatz zu fann_train_on_data wird nur ein einzelner Datensatz pro Aufruf verarbeitet, sodass du die vollständige Kontrolle über den Trainingsablauf behältst.

Die Funktion setzt voraus, dass das neuronale Netz zuvor mit fann_create_standard oder einer ähnlichen Erstell-Funktion erzeugt wurde. Der Trainingsalgorithmus sowie die Lernrate können mit fann_set_training_algorithm und fann_set_learning_rate konfiguriert werden.

Typischerweise wird fann_train in einer Schleife über alle Trainingsbeispiele aufgerufen, um eine vollständige Trainingsepoche zu realisieren. Nach dem Training kann das trainierte Netz mit fann_save gespeichert werden.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Ressource, die mit einer der fann_create_*-Funktionen erzeugt wurde.
$input Pflicht array Ein Array von Eingabewerten (Floats), das dem neuronalen Netz als Eingabe präsentiert wird. Die Anzahl der Elemente muss der Anzahl der Eingabe-Neuronen des Netzes entsprechen.
$desired_output Pflicht array Ein Array von gewünschten Ausgabewerten (Floats), gegen die das Netz trainiert wird. Die Anzahl der Elemente muss der Anzahl der Ausgabe-Neuronen des Netzes entsprechen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Training der Iteration erfolgreich war, andernfalls false (z. B. bei einer ungültigen Ressource oder falsch dimensionierten Arrays).

Beispiele

Manuelles Training eines XOR-Netzes

<?php
// Netz erstellen: 2 Eingänge, 1 versteckte Schicht mit 3 Neuronen, 1 Ausgang
$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);
fann_set_learning_rate($ann, 0.7);

// XOR-Trainingsdaten
$training_data = [
    [[0.0, 0.0], [0.0]],
    [[0.0, 1.0], [1.0]],
    [[1.0, 0.0], [1.0]],
    [[1.0, 1.0], [0.0]],
];

// 10.000 Epochen trainieren
for ($epoch = 0; $epoch < 10000; $epoch++) {
    foreach ($training_data as [$input, $desired_output]) {
        fann_train($ann, $input, $desired_output);
    }
}

// Testen
foreach ($training_data as [$input, $desired_output]) {
    $output = fann_run($ann, $input);
    printf("Input: [%s] => Ausgabe: %.4f (Soll: %.1f)\n",
        implode(', ', $input), $output[0], $desired_output[0]);
}

fann_destroy($ann);
Input: [0, 0] => Ausgabe: -0.9923 (Soll: 0.0) Input: [0, 1] => Ausgabe: 0.9891 (Soll: 1.0) Input: [1, 0] => Ausgabe: 0.9887 (Soll: 1.0) Input: [1, 1] => Ausgabe: -0.9918 (Soll: 0.0)

Training mit Fehlerüberwachung und Abbruchbedingung

<?php
$ann = fann_create_standard(3, 2, 4, 1);
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_learning_rate($ann, 0.5);

$data = [
    [[0.0, 0.0], [0.0]],
    [[0.0, 1.0], [1.0]],
    [[1.0, 0.0], [1.0]],
    [[1.0, 1.0], [0.0]],
];

$max_epochs  = 50000;
$target_mse  = 0.001;

for ($epoch = 1; $epoch <= $max_epochs; $epoch++) {
    foreach ($data as [$input, $output]) {
        fann_train($ann, $input, $output);
    }

    $mse = fann_get_MSE($ann);

    if ($epoch % 5000 === 0) {
        echo "Epoche {$epoch}: MSE = {$mse}\n";
    }

    if ($mse < $target_mse) {
        echo "Ziel-MSE erreicht nach {$epoch} Epochen.\n";
        break;
    }
}

fann_save($ann, '/tmp/xor.net');
fann_destroy($ann);
Epoche 5000: MSE = 0.0423 Epoche 10000: MSE = 0.0089 Ziel-MSE erreicht nach 12347 Epochen.

// Wichtig · Fallstricke

Erweiterung erforderlich: fann_train ist Teil der FANN-Erweiterung (Fast Artificial Neural Network Library). Diese muss separat installiert und in der php.ini aktiviert werden.

Dimensionen beachten: Die Arrays input und desired_output müssen exakt die richtige Anzahl an Elementen aufweisen, die der Netzkonfiguration entspricht. Falsch dimensionierte Arrays führen zu Trainingsfehlern oder undefiniertem Verhalten.

Performance: Für großes Trainings-Datenmengen ist fann_train_on_data oder fann_train_on_file effizienter, da diese Funktionen intern optimiert sind. fann_train eignet sich vor allem für benutzerdefinierte Trainingsschleifen mit Sonderbedingungen.