我正在研究一些问题,这些问题最终归结为一个超定方程组的简单组合,,其中是对于。我正在利用 Armadillo 的 C++ 库,我将其链接到 MKL。计算了我的训练数据的均方根误差,并注意到我的错误和解决方案x每次测试都有显着变化(在第二个或第三个有效数字中,有时某些系数会偏离 2 倍)。这让我很困扰,所以我用 MKL_NUM_THREADS=1 运行应用程序,强制线程数减少到 1,每次运行时我都得到相同的答案(噪音差异很小,很远),错误下降了几个数量级。
我使用非常简单的调用 arma::solve(X,A,B) 求解线性系统,其中包含两列我们要求解的系数,包含两列个数据点。条件数可能很大(忘记检查它),但它仍然在我猜测的“安全范围”之内(当我尝试使用它时,NumPy 的 linalg.lstsq 从未抱怨过)。
我猜这是我的矩阵汇编中的某个错误,或者我可能从根本上误解了犰狳使用的多线程 MKL。这是预期的行为还是代码中肯定有问题的迹象?
感谢您的任何建议!