Start · Sprachen · PHP · Referenz · fann_get_MSE

fann_get_MSE

Funktion

Liest den mittleren quadratischen Fehler (Mean Squared Error) des neuronalen Netzes aus dem letzten Trainings- oder Testlauf.

Kategorie: misc

Signatur

fann_get_MSE(resource $ann): float

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.0 bedeutet, dass das Netz alle Trainingsdaten exakt reproduziert (typischerweise ein Zeichen von Overfitting).
  • Der MSE kann nach dem Laden eines gespeicherten Netzes 0 betragen, 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

Typ
float
Beschreibung
Gibt den mittleren quadratischen Fehler des Netzwerks als Gleitkommazahl zurück. Der Wert bezieht sich auf den letzten Trainings- oder Testlauf. Wurde noch kein Training durchgeführt, wird 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);
?>
Epoch 100: MSE = 0.045231 Epoch 200: MSE = 0.012843 Epoch 300: MSE = 0.003102 Ziel-MSE von 0.001 nach 342 Epochen erreicht.

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);
?>
Mittlerer quadratischer Fehler auf Testdaten: 0.00423 Netzwerk hat ausreichende Genauigkeit.

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