Start · Sprachen · PHP · Referenz · fann_test_data

fann_test_data

Funktion

Testet ein neuronales Netz mit einem kompletten Trainingsdatensatz und gibt den mittleren quadratischen Fehler (MSE) zurück.

Kategorie: misc

Signatur

fann_test_data(resource $ann, resource $data): float|false

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

Typ
float|false
Beschreibung
Gibt den mittleren quadratischen Fehler (MSE) als 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);
Mittlerer quadratischer Fehler (MSE): 0.0023541

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);
Validierungs-MSE nach Training: 0.0087123 Netz gespeichert.

// 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.