Signatur
Beschreibung
fann_get_MSE() gibt den mittleren quadratischen Fehler (MSE, Mean Squared Error) zurück, der während des letzten Trainings- oder Testlaufs des neuronalen Netzes berechnet wurde. Der MSE ist ein wichtiges Maß für die Güte eines neuronalen Netzes: Je kleiner der Wert, desto besser passt das Netz zu den Trainingsdaten.
Der MSE wird automatisch von FANN (Fast Artificial Neural Network Library) berechnet und aktualisiert, wenn Funktionen wie fann_train_on_data(), fann_train_epoch() oder fann_test_data() aufgerufen werden. fann_get_MSE() liest lediglich den zuletzt berechneten Wert aus.
Diese Funktion ist nützlich, um die Trainingsfortschritte zu überwachen und ein Abbruchkriterium zu definieren, z. B. wenn der MSE einen bestimmten Schwellenwert unterschreitet. In Kombination mit einer Schleife über fann_train_epoch() lässt sich so ein kontrolliertes Training implementieren.
- Ein MSE von
0.0bedeutet, dass das Netz alle Trainingsdaten exakt reproduziert (typischerweise ein Zeichen von Overfitting). - Der MSE kann nach dem Laden eines gespeicherten Netzes
0betragen, bis ein Trainings- oder Testlauf durchgeführt wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ann Pflicht | resource | Eine gültige FANN-Netzwerk-Ressource, die zuvor mit fann_create_standard() oder einer ähnlichen Funktion erstellt wurde. |
Rückgabewert
0.0 zurückgegeben.Beispiele
MSE nach jedem Trainings-Epoch überwachen
<?php
// Netzwerk erstellen: 2 Eingaben, 1 versteckte Schicht mit 3 Neuronen, 1 Ausgabe
$ann = fann_create_standard(3, 2, 3, 1);
if (!$ann) {
die('Fehler beim Erstellen des Netzwerks.');
}
// Trainingsdaten laden (z. B. XOR-Problem)
$train_data = fann_read_train_from_file('xor.data');
if (!$train_data) {
die('Fehler beim Laden der Trainingsdaten.');
}
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
$max_epochs = 1000;
$desired_mse = 0.001;
for ($epoch = 1; $epoch <= $max_epochs; $epoch++) {
fann_train_epoch($ann, $train_data);
$mse = fann_get_MSE($ann);
if ($epoch % 100 === 0) {
echo "Epoch $epoch: MSE = $mse\n";
}
if ($mse <= $desired_mse) {
echo "Ziel-MSE von $desired_mse nach $epoch Epochen erreicht.\n";
break;
}
}
fann_destroy_train($train_data);
fann_destroy($ann);
?>
MSE nach einem Testlauf auslesen
<?php
// Netzwerk aus Datei laden
$ann = fann_create_from_file('trained_network.net');
if (!$ann) {
die('Netzwerk konnte nicht geladen werden.');
}
// Testdaten laden
$test_data = fann_read_train_from_file('test.data');
if (!$test_data) {
die('Testdaten konnten nicht geladen werden.');
}
// Netzwerk auf Testdaten prüfen
fann_test_data($ann, $test_data);
// MSE nach dem Test auslesen
$mse = fann_get_MSE($ann);
echo "Mittlerer quadratischer Fehler auf Testdaten: " . $mse . "\n";
if ($mse < 0.01) {
echo "Netzwerk hat ausreichende Genauigkeit.\n";
} else {
echo "Netzwerk sollte weiter trainiert werden.\n";
}
fann_destroy_train($test_data);
fann_destroy($ann);
?>
// Wichtig · Fallstricke
Erweiterung erforderlich: fann_get_MSE() ist Teil der FANN-Erweiterung für PHP. Diese muss explizit kompiliert und aktiviert sein (extension=fann.so in der php.ini). Seit PHP 8.0 wird die Erweiterung nicht mehr aktiv gepflegt; in neueren PHP-Versionen sollte die Verfügbarkeit geprüft werden.
Der zurückgegebene MSE-Wert ist immer auf den letzten Trainings- oder Testlauf bezogen. Zwischen zwei Aufrufen von fann_get_MSE() ohne zwischenzeitliches Training oder Testen liefert die Funktion stets denselben Wert.
Ein sehr niedriger MSE auf den Trainingsdaten ist nicht zwingend ein Zeichen für ein gutes Modell – er kann auch auf Overfitting hinweisen. Es empfiehlt sich, den MSE sowohl auf Trainings- als auch auf Testdaten zu verfolgen.