Start · Sprachen · PHP · Referenz · fann_test

fann_test

Funktion

Führt einen einzelnen Testdurchlauf mit einem neuronalen Netz durch und gibt den mittleren quadratischen Fehler (MSE) zurück.

Kategorie: misc

Signatur

fann_test(resource $ann, array $input, array $desired_output): array|false

Beschreibung

fann_test testet ein trainiertes neuronales Netz (FANN – Fast Artificial Neural Network) mit einem einzelnen Eingabevektor und dem dazugehörigen gewünschten Ausgabevektor. Die Funktion berechnet die Ausgabe des Netzes für die übergebene Eingabe und vergleicht sie mit der Soll-Ausgabe, um den internen MSE-Akkumulator zu aktualisieren.

Der Rückgabewert ist ein Array mit den tatsächlich berechneten Ausgabewerten des Netzes. Der berechnete Fehler wird intern gespeichert und kann danach mit fann_get_MSE abgefragt werden. Dies ermöglicht eine schrittweise Auswertung der Netzqualität über mehrere Testmuster hinweg.

Typisch wird fann_test eingesetzt, um nach dem Training die Vorhersagegenauigkeit des Netzes auf Testdaten zu prüfen, ohne das Netz selbst zu verändern. Im Gegensatz zu fann_train werden dabei keine Gewichte angepasst.

Die Funktion gehört zur FANN-Erweiterung (php-fann) und setzt voraus, dass diese installiert und aktiviert ist. Die Ressource $ann muss durch fann_create_standard, fann_create_from_file o. ä. erstellt worden sein.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Die Ressource des neuronalen Netzes, wie sie von fann_create_standard oder fann_create_from_file zurückgegeben wird.
$input Pflicht array Ein Array mit Eingabewerten (Floats) für das Netz. Die Anzahl der Elemente muss der Anzahl der Eingabeneuronen entsprechen.
$desired_output Pflicht array Ein Array mit den gewünschten (erwarteten) Ausgabewerten (Floats). Die Anzahl der Elemente muss der Anzahl der Ausgabeneuronen entsprechen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den tatsächlich berechneten Ausgabewerten des neuronalen Netzes zurück. Im Fehlerfall (z. B. ungültige Ressource oder falsche Array-Längen) wird false zurückgegeben.

Beispiele

Netz nach dem Training auf Testdaten prüfen

<?php
// Netz mit 2 Eingabe-, 3 versteckten und 1 Ausgabeneuron erstellen
$ann = fann_create_standard(3, 2, 3, 1);

// Netz aus einer gespeicherten Datei laden (nach erfolgtem Training)
$ann = fann_create_from_file('xor_trained.net');

if ($ann) {
    // Testmuster: XOR(1, 0) = 1
    $input          = [1.0, 0.0];
    $desired_output = [1.0];

    $output = fann_test($ann, $input, $desired_output);

    if ($output !== false) {
        echo 'Netz-Ausgabe: ' . $output[0] . PHP_EOL;
        echo 'MSE nach Test: ' . fann_get_MSE($ann) . PHP_EOL;
    } else {
        echo 'Fehler beim Testen.' . PHP_EOL;
    }

    fann_destroy($ann);
}
Netz-Ausgabe: 0.9876543 MSE nach Test: 0.000153

Mehrere Testmuster auswerten und durchschnittlichen MSE ermitteln

<?php
$ann = fann_create_from_file('xor_trained.net');

if ($ann) {
    fann_reset_MSE($ann);

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

    foreach ($testData as [$input, $desired]) {
        $output = fann_test($ann, $input, $desired);
        if ($output !== false) {
            printf(
                'Eingabe: [%s] -> Ausgabe: %.4f (Soll: %.1f)%s',
                implode(', ', $input),
                $output[0],
                $desired[0],
                PHP_EOL
            );
        }
    }

    echo 'Gesamt-MSE: ' . fann_get_MSE($ann) . PHP_EOL;
    fann_destroy($ann);
}
Eingabe: [0, 0] -> Ausgabe: 0.0031 (Soll: 0.0) Eingabe: [0, 1] -> Ausgabe: 0.9912 (Soll: 1.0) Eingabe: [1, 0] -> Ausgabe: 0.9876 (Soll: 1.0) Eingabe: [1, 1] -> Ausgabe: 0.0044 (Soll: 0.0) Gesamt-MSE: 0.000189

// Wichtig · Fallstricke

FANN-Erweiterung erforderlich: Die Funktion steht nur zur Verfügung, wenn die PHP-Erweiterung php-fann installiert ist. Diese ist nicht Bestandteil der PHP-Standarddistribution und muss separat installiert werden (z. B. via PECL: pecl install fann).

Array-Längen: Die Arrays $input und $desired_output müssen exakt so viele Elemente enthalten, wie das Netz Eingabe- bzw. Ausgabeneuronen besitzt. Abweichungen führen zu false als Rückgabewert.

MSE-Akkumulator: Der interne Fehler wird bei jedem Aufruf von fann_test akkumuliert. Um eine saubere Messung über mehrere Muster zu erhalten, sollte der Akkumulator vor dem ersten Testaufruf mit fann_reset_MSE zurückgesetzt werden.

Kein Training: Im Gegensatz zu fann_train werden bei fann_test keinerlei Gewichte oder Bias-Werte des Netzes verändert — die Funktion ist rein evaluativ.