我正在研究使用人工神经网络 (ANN) 来预测我的流体中的反应速率,而不是解决整个刚性 ODE 系统。我实验室的一些人已经在这方面做了一些工作,所以我不是从头开始,但我的应用程序有问题。我认为其中之一与我的训练数据集的质量有关。我们通常从 1D/2D/3D 的 CFD 模拟中提取训练数据。无论如何,我们最终都会得到一个多维数据数组来提供给神经网络。为了让您了解问题的大小,我正在研究训练 8 个网络,每个网络有 10 个输入和 1 个输出。我觉得大约 100,000 个点的训练集是合理的,但问题是这 100,000 个点需要覆盖我的多维空间的特定区域。
- 对于每个快照,只有一小部分点位于我需要高采样以确保我的训练准确的区域
- 当我一起编译快照时,我最终得到了许多近乎重复的点,这(我相信)对我的 ANN 训练有负面影响 a)通过对这些区域施加更多权重来使训练产生偏差 b)添加不必要的点。
所以我一直在尝试过滤我记录的点,然后再将它们包含在我的训练集中。正如我所看到的,这涉及检查一个新点是否在我的数据集每个点的某个 n 维半径内。这种蛮力方法,除了像 n^2 这样的一些技巧之外,在从 100,000 中提取 10,000 点时效果一般(需要 30 分钟),但随着我增加快照的大小和数量而崩溃......显然,必须有更聪明的方法来做到这一点,但我不确定从哪个方向开始寻找。我第一次尝试使用 python 并且可以转移到 FORTRAN 以加快速度,但我觉得我应该首先寻找更好的策略。我唯一的希望是某种 kd 树吗?我对它们几乎没有经验,我看到的问题是我的树会随着我构建数据集而增长,这只会增加复杂性。python kd 树库是否适合我的需要?考虑到我的问题的规模,我应该搬到 FORTRAN 吗?任何建议表示赞赏,谢谢!