Start · Sprachen · PHP · Referenz · fann_run

fann_run

Funktion

Führt einen Eingabe-Vektor durch ein neuronales Netzwerk und gibt den Ausgabe-Vektor zurück.

Kategorie: misc

Signatur

fann_run(resource $ann, array $input): array|false

Beschreibung

fann_run ist die zentrale Inferenz-Funktion der FANN-Erweiterung (Fast Artificial Neural Network). Sie propagiert einen gegebenen Eingabe-Vektor durch alle Schichten des Netzwerks und liefert den resultierenden Ausgabe-Vektor zurück. Das Netzwerk muss zuvor mit fann_create_standard (oder einer ähnlichen Funktion) erstellt und idealerweise mit fann_train_on_file oder fann_train_on_data trainiert worden sein.

Der Eingabe-Array muss exakt so viele Elemente enthalten, wie das Netzwerk Eingabe-Neuronen besitzt. Die zurückgegebenen Ausgabewerte liegen je nach verwendeter Aktivierungsfunktion typischerweise im Bereich zwischen –1 und 1 (bei FANN_SIGMOID_SYMMETRIC) oder zwischen 0 und 1 (bei FANN_SIGMOID).

Typische Anwendungsfälle sind Klassifikation (z. B. Bilderkennung, Spam-Filter), Regression oder allgemeine Vorhersageaufgaben, bei denen ein trainiertes Modell auf neue Daten angewendet wird.

Hinweis: Die FANN-Erweiterung muss separat installiert sein (pecl install fann). Ab PHP 8 ist die prozedural-orientierte FANN-Extension zugunsten objektorientierter Alternativen seltener im Einsatz, bleibt aber weiterhin nutzbar.

Parameter

Name Typ Default Beschreibung
$ann Pflicht resource Eine gültige FANN-Netzwerk-Ressource, die z. B. mit fann_create_standard oder fann_create_from_file erzeugt wurde.
$input Pflicht array Ein indizierter Array mit numerischen Eingabewerten. Die Anzahl der Elemente muss exakt der Anzahl der Eingabe-Neuronen des Netzwerks entsprechen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg einen indizierten Array mit den Ausgabewerten der Ausgabe-Neuronen zurück. Bei einem Fehler (z. B. falsche Anzahl von Eingabewerten oder ungültige Ressource) wird false zurückgegeben.

Beispiele

Einfache XOR-Inferenz mit einem trainierten FANN-Netzwerk

<?php
// Netzwerk aus gespeicherter Datei laden
$ann = fann_create_from_file('xor_trained.net');

if ($ann === false) {
    die('Netzwerk konnte nicht geladen werden.');
}

// XOR-Eingaben testen
$inputs = [
    [0.0, 0.0],
    [0.0, 1.0],
    [1.0, 0.0],
    [1.0, 1.0],
];

foreach ($inputs as $input) {
    $output = fann_run($ann, $input);
    if ($output !== false) {
        printf(
            "Eingabe: [%.0f, %.0f] => Ausgabe: %.4f\n",
            $input[0],
            $input[1],
            $output[0]
        );
    }
}

fann_destroy($ann);
Eingabe: [0, 0] => Ausgabe: -0.9998 Eingabe: [0, 1] => Ausgabe: 0.9997 Eingabe: [1, 0] => Ausgabe: 0.9997 Eingabe: [1, 1] => Ausgabe: -0.9998

Netzwerk erstellen, trainieren und Ausgabe auswerten

<?php
// Netzwerk mit 2 Eingabe-, 3 versteckten und 1 Ausgabe-Neuron erstellen
$ann = fann_create_standard(3, 2, 3, 1);

if ($ann) {
    // Aktivierungsfunktionen setzen
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    // Training anhand einer Datei (XOR-Daten)
    fann_train_on_file($ann, 'xor.data', 500, 10, 0.001);

    // Inferenz durchführen
    $result = fann_run($ann, [1.0, 0.0]);

    if ($result !== false) {
        echo 'Ausgabe (1 XOR 0): ' . round($result[0]) . PHP_EOL;
    } else {
        echo 'Fehler bei der Ausführung.' . PHP_EOL;
    }

    fann_save($ann, 'xor_trained.net');
    fann_destroy($ann);
}
Ausgabe (1 XOR 0): 1

// Wichtig · Fallstricke

Eingabe-Länge beachten: Die Länge des input-Arrays muss exakt mit der Anzahl der Eingabe-Neuronen übereinstimmen, die beim Erstellen des Netzwerks angegeben wurden. Stimmt die Anzahl nicht überein, gibt fann_run false zurück und erzeugt einen PHP-Fehler.

Ressourcen freigeben: Nach der Nutzung des Netzwerks sollte fann_destroy aufgerufen werden, um den allokierten Speicher freizugeben.

Verfügbarkeit: Die FANN-Erweiterung ist kein Bestandteil der PHP-Standardinstallation und muss über PECL installiert werden (pecl install fann). Für produktive Anwendungen in PHP 8+ sollte der Einsatz objektorientierter Machine-Learning-Bibliotheken in Betracht gezogen werden.