Signatur
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
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);
}
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);
}
// 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.