Start · Sprachen · PHP · Referenz · fann_merge_train_data

fann_merge_train_data

Funktion

Führt zwei FANN-Trainingsdatensätze zu einem neuen gemeinsamen Datensatz zusammen.

seit PHP 5.6.0 Kategorie: misc

Signatur

fann_merge_train_data(resource $data1, resource $data2): resource|false

Beschreibung

fann_merge_train_data() kombiniert zwei bestehende FANN-Trainingsdatensätze (training data resources) zu einem einzigen neuen Datensatz. Die Trainingsbeispiele beider Quellen werden dabei aneinandergefügt, wobei die Reihenfolge beibehalten wird: zuerst alle Samples aus data1, dann alle aus data2.

Diese Funktion ist nützlich, wenn Trainingsdaten aus verschiedenen Quellen stammen (z. B. aus unterschiedlichen Dateien oder dynamisch erzeugt wurden) und vor dem eigentlichen Training vereinheitlicht werden sollen. Die Eingabe- und Ausgabedimensionen beider Datensätze müssen identisch sein, da FANN ansonsten einen Fehler meldet.

Der zurückgegebene Ressource-Handle repräsentiert einen vollständig unabhängigen neuen Datensatz. Änderungen daran wirken sich nicht auf die Quelldatensätze aus. Um Speicherlecks zu vermeiden, sollte der zusammengeführte Datensatz nach der Verwendung mit fann_destroy_train() freigegeben werden.

Die Funktion gehört zur FANN-Erweiterung (Fast Artificial Neural Network Library) und setzt deren Installation voraus.

Parameter

Name Typ Default Beschreibung
$data1 Pflicht resource Der erste FANN-Trainingsdatensatz als Ressource, erzeugt z. B. durch fann_read_train_from_file() oder fann_create_train().
$data2 Pflicht resource Der zweite FANN-Trainingsdatensatz als Ressource. Eingabe- und Ausgabedimensionen müssen mit denen von data1 übereinstimmen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine neue FANN-Trainingsdaten-Ressource zurück, die alle Samples beider Eingabedatensätze enthält. Im Fehlerfall (z. B. bei inkompatiblen Dimensionen oder ungültigen Ressourcen) wird false zurückgegeben.

Beispiele

Zwei Trainingsdateien zusammenführen und ein Netz trainieren

<?php
// Beide Trainingsdatensätze aus Dateien laden
$trainData1 = fann_read_train_from_file('train_part1.data');
$trainData2 = fann_read_train_from_file('train_part2.data');

if ($trainData1 === false || $trainData2 === false) {
    die('Fehler beim Laden der Trainingsdaten.');
}

// Datensätze zusammenführen
$mergedData = fann_merge_train_data($trainData1, $trainData2);

if ($mergedData === false) {
    die('Fehler beim Zusammenführen der Trainingsdaten.');
}

echo 'Anzahl Trainingsbeispiele gesamt: ' . fann_length_train_data($mergedData) . PHP_EOL;

// Netz erstellen und mit den zusammengeführten Daten trainieren
$ann = fann_create_standard(3, 2, 4, 1);
fann_train_on_data($ann, $mergedData, 500, 10, 0.0001);

// Ressourcen freigeben
fann_destroy_train($mergedData);
fann_destroy_train($trainData1);
fann_destroy_train($trainData2);
fann_destroy($ann);
?>
Anzahl Trainingsbeispiele gesamt: 200

Dynamisch erstellte Datensätze zusammenführen

<?php
// Ersten Datensatz manuell erstellen (2 Eingaben, 1 Ausgabe, 3 Samples)
$data1 = fann_create_train_from_callback(3, 2, 1, function ($num, $index) {
    $inputs  = [[$index * 0.1, $index * 0.2]];
    $outputs = [[$index * 0.3]];
    return [$inputs[0], $outputs[0]];
});

// Zweiten Datensatz aus Datei laden
$data2 = fann_read_train_from_file('extra_samples.data');

if ($data1 && $data2) {
    $merged = fann_merge_train_data($data1, $data2);
    if ($merged) {
        echo 'Zusammengeführte Samples: ' . fann_length_train_data($merged) . PHP_EOL;
        fann_save_train($merged, 'merged_train.data');
        fann_destroy_train($merged);
    }
    fann_destroy_train($data1);
    fann_destroy_train($data2);
}
?>
Zusammengeführte Samples: 53

// Wichtig · Fallstricke

Dimensionskompatibilität: Beide Datensätze müssen exakt dieselbe Anzahl von Eingabe- und Ausgabeneuronen aufweisen. Unterschiedliche Dimensionen führen zu einem Fehler und false als Rückgabewert.

Speicherverwaltung: Der durch fann_merge_train_data() erzeugte Datensatz ist eine eigenständige Kopie. Alle drei Ressourcen (beide Quellen und das Ergebnis) müssen separat mit fann_destroy_train() freigegeben werden, um Speicherlecks zu vermeiden.

Die FANN-Erweiterung ist standardmäßig nicht in PHP enthalten und muss separat installiert werden (pecl install fann oder über den Paketmanager des Betriebssystems).