Signatur
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
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);
}
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;
}
// 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.