Signatur
Beschreibung
fann_test_data() führt alle Eingabemuster eines FANN-Trainingsdatensatzes durch das angegebene neuronale Netz und berechnet den mittleren quadratischen Fehler (Mean Squared Error, MSE). Diese Funktion ist nützlich, um die Qualität eines trainierten Netzes auf einem Validierungs- oder Testdatensatz zu messen, ohne dabei die Gewichte des Netzes zu verändern.
Der zurückgegebene MSE-Wert gibt an, wie gut das Netz die erwarteten Ausgaben approximiert. Ein niedrigerer Wert bedeutet eine bessere Übereinstimmung. Typischerweise wird diese Funktion nach dem Training verwendet, um zu überprüfen, ob das Netz auf bisher ungesehenen Daten generalisiert.
Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) und setzt voraus, dass die fann-Erweiterung in PHP installiert und aktiv ist. Der Trainingsdatensatz muss zuvor mit fann_read_train_from_file() oder einer ähnlichen Funktion geladen worden sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine FANN-Netzwerk-Ressource, wie sie z. B. von fann_create_standard() oder fann_create_from_file() zurückgegeben wird. |
|
| $data Pflicht | resource | Eine FANN-Trainingsdaten-Ressource, die den Testdatensatz enthält. Wird z. B. mit fann_read_train_from_file() erzeugt. |
Rückgabewert
float zurück, der die Abweichung der Netzausgaben von den erwarteten Ausgaben beschreibt. Im Fehlerfall (z. B. ungültige Ressource) wird false zurückgegeben.Beispiele
MSE eines trainierten Netzes auf Testdaten ermitteln
<?php
// Neuronales Netz aus Datei laden
$ann = fann_create_from_file('mein_netz.net');
if (!$ann) {
die('Netz konnte nicht geladen werden.');
}
// Testdatensatz laden
$testData = fann_read_train_from_file('testdaten.data');
if (!$testData) {
die('Testdaten konnten nicht geladen werden.');
}
// MSE auf Testdaten berechnen
$mse = fann_test_data($ann, $testData);
if ($mse === false) {
echo 'Fehler beim Testen der Daten.' . PHP_EOL;
} else {
echo 'Mittlerer quadratischer Fehler (MSE): ' . $mse . PHP_EOL;
}
// Ressourcen freigeben
fann_destroy($ann);
fann_destroy_train($testData);
Netz trainieren und anschließend auf separatem Validierungsdatensatz testen
<?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);
// Trainingsdaten laden und Netz trainieren
$trainData = fann_read_train_from_file('trainingsdaten.data');
fann_train_on_data($ann, $trainData, 500, 10, 0.001);
// Validierungsdatensatz laden
$validData = fann_read_train_from_file('validierungsdaten.data');
// MSE auf Validierungsdaten prüfen
$mse = fann_test_data($ann, $validData);
echo 'Validierungs-MSE nach Training: ' . $mse . PHP_EOL;
// Netz speichern, falls MSE akzeptabel
if ($mse < 0.01) {
fann_save($ann, 'mein_netz.net');
echo 'Netz gespeichert.' . PHP_EOL;
} else {
echo 'Netz erfüllt die Qualitätsanforderungen nicht.' . PHP_EOL;
}
fann_destroy($ann);
fann_destroy_train($trainData);
fann_destroy_train($validData);
// Wichtig · Fallstricke
Voraussetzung: Die FANN-Erweiterung muss in PHP installiert und aktiviert sein (extension=fann in der php.ini). Diese Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL oder die FANN-Bibliothek eingebunden werden.
Ressourcenverwaltung: Nach der Verwendung sollten Netz- und Trainingsdaten-Ressourcen immer mit fann_destroy() bzw. fann_destroy_train() freigegeben werden, um Speicherlecks zu vermeiden.
Hinweis: fann_test_data() verändert die Netzgewichte nicht — es wird lediglich der Fehler berechnet. Es ist eine reine Auswertefunktion und damit sicher für Validierungs- und Testphasen geeignet.