Ich möchte künstliche neuronale Netze (ANN) verwenden, um die Reaktionsgeschwindigkeiten in meiner Flüssigkeit vorherzusagen, anstatt das gesamte System steifer ODEs zu lösen. Einige Leute aus meinem Labor haben bereits daran gearbeitet, damit ich nicht bei Null anfange, sondern Probleme mit meinen Anwendungen habe. Eine davon bezieht sich meiner Meinung nach auf die Qualität meines Datensatzes für das Training. Normalerweise extrahieren wir Trainingsdaten aus CFD-Simulationen, die entweder 1D / 2D / 3D sind. Egal was passiert, wir erhalten ein mehrdimensionales Datenarray, das dem neuronalen Netzwerk zugeführt werden kann. Um Ihnen eine Vorstellung von der Größe des Problems zu geben, möchte ich 8 Netze mit jeweils 10 Eingängen und 1 Ausgang trainieren. Ich denke, ein Trainingssatz von ungefähr 100.000 Punkten wäre vernünftig, aber das Problem ist, dass diese 100.000 Punkte einen bestimmten Bereich meines mehrdimensionalen Raums abdecken müssen.
- Für jeden Schnappschuss liegt nur ein kleiner Teil der Punkte in der Region, in der ich eine hohe Stichprobe benötige, um sicherzustellen, dass mein Training korrekt ist
- Wenn ich Schnappschüsse zusammenstelle, erhalte ich viele nahezu doppelte Punkte, die sich (glaube ich) negativ auf mein ANN-Training auswirken, indem a) das Training durch mehr Gewicht auf diese Regionen verzerrt wird, b) unnötige Punkte hinzugefügt werden.
Daher habe ich versucht, die von mir aufgezeichneten Punkte zu filtern, bevor ich sie in mein Trainingsset aufgenommen habe. Aus meiner Sicht bedeutet dies, zu überprüfen, ob sich ein neuer Punkt innerhalb eines bestimmten n-dimensionalen Radius von jedem Punkt meines Datensatzes befindet. Dieser Brute-Force-Ansatz, der bis auf ein paar Tricks wie n ^ 2 skaliert, funktioniert so lala, um 10.000 von 100.000 Punkten zu extrahieren (dauert etwa 30 Minuten), bricht jedoch zusammen, wenn ich die Größe und Anzahl der Schnappschüsse vergrößere ... Klar Es muss einen klügeren Weg geben, aber ich bin mir nicht sicher, in welche Richtung ich anfangen soll. Ich habe es zuerst mit Python versucht und konnte zu FORTRAN wechseln, um die Dinge zu beschleunigen, aber ich denke, ich sollte zuerst nach einer besseren Strategie suchen. Ist meine einzige Hoffnung eine Art KD-Baum? Ich habe wenig bis gar keine Erfahrung mit ihnen und das Problem, das ich sehe, ist, dass mein Baum beim Erstellen meines Datensatzes wächst und dies nur die Komplexität erhöhen kann. Würde eine Python-KD-Baumbibliothek meinen Anforderungen entsprechen? Sollte ich angesichts der Größe meines Problems zu FORTRAN wechseln? Jeder Rat wird geschätzt, danke!