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