Start · Sprachen · PHP · Referenz · fann_create_train_from_callback

fann_create_train_from_callback

Funktion

Erstellt eine FANN-Trainingsdatenstruktur, indem für jeden Datensatz eine benutzerdefinierte Callback-Funktion aufgerufen wird.

seit PHP 5.6.0 Kategorie: misc

Signatur

fann_create_train_from_callback(int $num_data, int $num_input, int $num_output, callable $user_function): resource|false

Beschreibung

fann_create_train_from_callback erzeugt eine FANN-Trainingsdatenstruktur (training data), ohne dass die Daten aus einer Datei geladen werden müssen. Stattdessen wird für jeden der num_data Trainingsdatensätze die angegebene user_function aufgerufen, welche die zugehörigen Eingabe- und Ausgabewerte als Array zurückliefert.

Die Callback-Funktion erhält drei Parameter: den aktuellen Index (Integer, 0-basiert), die Anzahl der Eingaben (num_input) und die Anzahl der Ausgaben (num_output). Sie muss ein assoziatives Array mit den Schlüsseln input und output zurückgeben, wobei jeder Wert ein numerisches Array der entsprechenden Länge ist.

Diese Funktion ist besonders nützlich, wenn Trainingsdaten dynamisch berechnet oder aus einer Datenbank bzw. API geladen werden sollen, ohne sie vollständig in den Speicher zu laden oder in eine FANN-Datei zu schreiben. Sie eignet sich für große Datensätze und für Szenarien, in denen die Daten zur Laufzeit generiert werden.

Hinweis: Diese Funktion erfordert die FANN-Erweiterung (Fast Artificial Neural Network Library), die separat installiert werden muss.

Parameter

Name Typ Default Beschreibung
$num_data Pflicht int Die Gesamtanzahl der zu erzeugenden Trainingsdatensätze.
$num_input Pflicht int Die Anzahl der Eingabeneuronen; bestimmt die Länge des input-Arrays, das die Callback-Funktion zurückgeben muss.
$num_output Pflicht int Die Anzahl der Ausgabeneuronen; bestimmt die Länge des output-Arrays, das die Callback-Funktion zurückgeben muss.
$user_function Pflicht callable Eine Callback-Funktion mit der Signatur function(int $num, int $num_input, int $num_output): array. Sie wird für jeden Datensatz aufgerufen und muss ein Array der Form ['input' => [...], 'output' => [...]] zurückgeben.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine FANN-Trainingsdaten-Ressource zurück, die mit anderen fann_*-Funktionen verwendet werden kann, oder false im Fehlerfall (z. B. wenn die Erweiterung nicht geladen ist oder die Callback-Funktion ein ungültiges Format zurückgibt).

Beispiele

XOR-Trainingsdaten dynamisch erzeugen

<?php
// XOR-Wahrheitstabelle als Trainingsdaten erzeugen
$xorData = [
    ['input' => [0.0, 0.0], 'output' => [0.0]],
    ['input' => [0.0, 1.0], 'output' => [1.0]],
    ['input' => [1.0, 0.0], 'output' => [1.0]],
    ['input' => [1.0, 1.0], 'output' => [0.0]],
];

$trainData = fann_create_train_from_callback(
    4,  // 4 Datensätze
    2,  // 2 Eingaben
    1,  // 1 Ausgabe
    function (int $num, int $numInput, int $numOutput) use ($xorData): array {
        return $xorData[$num];
    }
);

if ($trainData === false) {
    echo "Fehler beim Erstellen der Trainingsdaten." . PHP_EOL;
} else {
    echo "Trainingsdaten erfolgreich erstellt." . PHP_EOL;
    echo "Anzahl Datensätze: " . fann_length_train_data($trainData) . PHP_EOL;
    fann_destroy_train($trainData);
}
Trainingsdaten erfolgreich erstellt. Anzahl Datensätze: 4

Sinusfunktion als Trainingsdaten generieren

<?php
// Sinusfunktion über [0, 2π] als Trainingsdaten erzeugen
$numSamples = 100;

$trainData = fann_create_train_from_callback(
    $numSamples,
    1,  // Eingabe: x-Wert
    1,  // Ausgabe: sin(x)-Wert
    function (int $num, int $numInput, int $numOutput) use ($numSamples): array {
        $x = ($num / ($numSamples - 1)) * 2 * M_PI;
        return [
            'input'  => [$x / (2 * M_PI)],   // normiert auf [0, 1]
            'output' => [(sin($x) + 1) / 2],  // normiert auf [0, 1]
        ];
    }
);

if ($trainData !== false) {
    echo "Sinusdaten erstellt: " . fann_length_train_data($trainData) . " Datensätze." . PHP_EOL;

    // Trainingsdaten in Datei speichern
    fann_save_train($trainData, '/tmp/sinus.data');
    fann_destroy_train($trainData);
} else {
    echo "Fehler beim Erstellen der Trainingsdaten." . PHP_EOL;
}
Sinusdaten erstellt: 100 Datensätze.

// Wichtig · Fallstricke

Voraussetzungen: Die FANN PHP-Erweiterung muss installiert und aktiviert sein (z. B. über pecl install fann). Ohne diese Erweiterung ist die Funktion nicht verfügbar.

Rückgabeformat der Callback-Funktion: Die Callback-Funktion muss zwingend ein Array mit den Schlüsseln 'input' und 'output' zurückgeben. Jeder Wert muss ein numerisches Array mit exakt num_input bzw. num_output Elementen (Fließkommazahlen) sein. Ein abweichendes Format führt zu einem Fehler oder undefinierten Verhalten.

Speicherverwaltung: Die zurückgegebene Ressource muss nach der Verwendung mit fann_destroy_train() freigegeben werden, um Speicherlecks zu vermeiden.

Wertebereich: FANN-Neuronen erwarten typischerweise Werte im Bereich [-1, 1] oder [0, 1], abhängig von der gewählten Aktivierungsfunktion. Es empfiehlt sich, Eingabe- und Ausgabewerte entsprechend zu normieren.