gpt4 book ai didi

java - Java 中的快速矩阵计算

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:02 24 4
gpt4 key购买 nike

我基本上是用 Java 进行人脸识别和验证,先用 PCA 测试,然后用 WMPCA 测试。我已经完全实现了 PCA,但是它运行得非常慢,训练 7900 个图像数据集需要 15 分钟。

我查看了最长延迟的位置,有些是不可避免的,例如预处理数据(获取面部区域、灰度、调整大小、存储)。然而,主要延迟出现在矩阵计算中。

第一个大延迟是在计算协方差矩阵期间,然后从协方差矩阵中获取特征值和特征向量。我目前正在使用 Apache 库来实现这一点,但它似乎是单线程的,并且在计算时只消耗 ~15% 的 CPU。它运行速度非常慢,虽然我已经找到了特征向量和特征值分解的可能替代方案,但我找不到用于协方差矩阵计算的替代快速库。

这是我计算上述内容时的代码片段:

    Log.append("Computing covariance matrix...");
// Compute covariance
RealMatrix matrix = new Covariance(new BlockRealMatrix(
dataWithAverageSubtracted).transpose()).getCovarianceMatrix();

Log.append("Computing eigen decomposition...");
// Get the eigenvalues and eigenvectors
EigenDecomposition eigen = new EigenDecomposition(matrix);

eigenValues = eigen.getRealEigenvalues();
// Transpose because rows need to be eigenvectors not columns
vectors = eigen.getV().transpose().getData();

在获取权重和特征脸时,我同时使用 Apache 和 Jama 进行其他更通用的矩阵计算。这两个库都被认为速度非常慢,我想替代品可能是 JBlas 之类的库,但这只会加快这一部分的速度。

我不想遇到我花很长时间在每个库所需的数据格式之间进行转换的问题。

有谁知道计算协方差矩阵然后进行特征分解的任何 Java 解决方案?这似乎是主要的瓶颈。

最佳答案

这可能取决于操作的类型,但是使用 C 等较低级别的语言进行繁重的计算可能会更快。您应该尝试对它们进行基准测试,如果 yield 足够重要,您可以使用 JNI 来连接 C来自 Java 的例程。

此类优化目前用于一些众所周知的应用程序,例如 Tomcat。

关于java - Java 中的快速矩阵计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com