Start · Sprachen · PHP · Referenz · fann_create_train

fann_create_train

Funktion

Erstellt eine leere Trainingsdatenstruktur für künstliche neuronale Netze mit der angegebenen Anzahl von Datensätzen, Eingaben und Ausgaben.

seit PHP 5.0.0 Kategorie: misc

Signatur

fann_create_train(int $num_data, int $num_input, int $num_output): resource|false

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

Typ
resource|false
Beschreibung
Gibt eine FANN-Trainingsdaten-Ressource zurück, wenn die Erstellung erfolgreich war. Bei einem Fehler (z. B. ungültige Parameter oder Speichermangel) wird 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 erfolgreich erstellt. Anzahl Datensätze: 4 Anzahl Eingaben: 2 Anzahl Ausgaben: 1

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);
Training abgeschlossen. Endgültiger MSE-Fehler: 0.00098...

// 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_input und num_output mü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() kann fann_read_train_from_file() verwendet werden, wenn die Trainingsdaten in einer FANN-kompatiblen Textdatei vorliegen.