Signatur
Beschreibung
fann_create_train() erzeugt eine leere FANN-Trainingsdatenstruktur (Training Data), die anschließend manuell mit Trainingsmustern befüllt werden kann. Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) für PHP.
Die zurückgegebene Ressource kann später mit Funktionen wie fann_train_on_data() oder fann_train_epoch() verwendet werden, um ein neuronales Netz zu trainieren. Die Struktur muss nach der Verwendung mit fann_destroy_train() freigegeben werden, um Speicherlecks zu vermeiden.
Diese Funktion ist besonders nützlich, wenn Trainingsdaten dynamisch zur Laufzeit generiert werden sollen, anstatt aus einer Datei geladen zu werden (wie es fann_read_train_from_file() tut). Die einzelnen Eingabe- und Ausgabevektoren können nach dem Erstellen über fann_set_train_data() eingetragen werden.
- num_data: Legt fest, wie viele Trainingsbeispiele die Struktur aufnehmen soll.
- num_input: Muss mit der Eingabeschichtgröße des neuronalen Netzes übereinstimmen.
- num_output: Muss mit der Ausgabeschichtgröße des neuronalen Netzes übereinstimmen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num_data Pflicht | int | Die Anzahl der Trainingsbeispiele (Datensätze), die die Struktur aufnehmen soll. Muss eine positive ganze Zahl sein. | |
| $num_input Pflicht | int | Die Anzahl der Eingabewerte pro Trainingsbeispiel. Muss mit der Anzahl der Neuronen in der Eingabeschicht des neuronalen Netzes übereinstimmen. | |
| $num_output Pflicht | int | Die Anzahl der Ausgabewerte pro Trainingsbeispiel. Muss mit der Anzahl der Neuronen in der Ausgabeschicht des neuronalen Netzes übereinstimmen. |
Rückgabewert
false zurückgegeben.Beispiele
Leere Trainingsdatenstruktur erstellen und befüllen
<?php
// Voraussetzung: FANN-Erweiterung ist installiert und aktiviert
// Anzahl der Trainingsbeispiele, Eingaben und Ausgaben
$num_data = 4;
$num_input = 2;
$num_output = 1;
// Leere Trainingsdatenstruktur erstellen
$train_data = fann_create_train($num_data, $num_input, $num_output);
if ($train_data === false) {
echo "Fehler: Trainingsdaten konnten nicht erstellt werden.";
exit(1);
}
// XOR-Trainingsdaten manuell eintragen
$inputs = [[0, 0], [0, 1], [1, 0], [1, 1]];
$outputs = [[0], [1], [1], [0]];
for ($i = 0; $i < $num_data; $i++) {
fann_set_train_data($train_data, $i, $inputs[$i], $outputs[$i]);
}
echo "Trainingsdaten erfolgreich erstellt.\n";
echo "Anzahl Datensätze: " . fann_length_train_data($train_data) . "\n";
echo "Anzahl Eingaben: " . fann_num_input_train_data($train_data) . "\n";
echo "Anzahl Ausgaben: " . fann_num_output_train_data($train_data) . "\n";
// Ressource freigeben
fann_destroy_train($train_data);
Trainingsdaten erstellen und Netz trainieren
<?php
// Neuronales Netz mit 2 Eingaben, 1 versteckter Schicht (3 Neuronen), 1 Ausgabe erstellen
$ann = fann_create_standard(3, 2, 3, 1);
if ($ann === false) {
echo "Netz konnte nicht erstellt werden.";
exit(1);
}
// Aktivierungsfunktion setzen
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
// Leere Trainingsdatenstruktur für XOR-Problem
$train_data = fann_create_train(4, 2, 1);
if ($train_data === false) {
echo "Trainingsdaten konnten nicht erstellt werden.";
fann_destroy($ann);
exit(1);
}
// XOR-Daten eintragen
fann_set_train_data($train_data, 0, [0, 0], [0]);
fann_set_train_data($train_data, 1, [0, 1], [1]);
fann_set_train_data($train_data, 2, [1, 0], [1]);
fann_set_train_data($train_data, 3, [1, 1], [0]);
// Training durchführen (max. 10000 Epochen, Fehlerziel: 0.001)
fann_train_on_data($ann, $train_data, 10000, 1000, 0.001);
echo "Training abgeschlossen.\n";
echo "Endgültiger MSE-Fehler: " . fann_get_MSE($ann) . "\n";
// Ressourcen freigeben
fann_destroy_train($train_data);
fann_destroy($ann);
// Wichtig · Fallstricke
Hinweise zur Verwendung:
- Die FANN-Erweiterung muss separat installiert werden (
pecl install fann) und ist nicht standardmäßig in PHP enthalten. Ab PHP 8 sollte die Kompatibilität der Erweiterung geprüft werden. - Nach der Verwendung der Trainingsdaten muss
fann_destroy_train()aufgerufen werden, um den zugewiesenen Speicher freizugeben. Andernfalls entstehen Speicherlecks. - Die Parameter
num_inputundnum_outputmüssen exakt mit den Schichtgrößen des zugehörigen neuronalen Netzes übereinstimmen, da es sonst zu Laufzeitfehlern beim Training kommt. - Alternativ zu
fann_create_train()kannfann_read_train_from_file()verwendet werden, wenn die Trainingsdaten in einer FANN-kompatiblen Textdatei vorliegen.