我想在MATLAB中拟合高斯混合模型。具体来说,我希望从不同的起点拟合数百个模型,并使它们适合几次EM迭代(例如10次)。最终目标是使用genetic algorithms to search for a good model。
拟合混合模型非常耗时,所以我想知道是否有使用MATLAB并行处理工具箱在gpu上运行的快速实现?我尝试通过将gpuArray传递给gmcluster函数并将gmcluster和相关文件中的适当变量更改为gpuArray来实现一个天真的gpu版本。这实际上使运行时更糟(在特定数据集CPU时间0.1,而GPU 0.2)。
对天真的gpu实现有什么改进吗? (我是gpu编程的新手)。
我知道有一些实施例如the one here但它不够灵活,不能采用均值和协方差起始参数。
我会感谢任何帮助/指示。
由于
编辑:这是代码的一部分需要相当长的时间,我想在GPU上运行。给出每个og k Gaussians的概率隶属度矩阵后,代码计算Sigma中μ和协方差的均值。
for j = 1:k
mu(j,:) = post(:,j)' * X / PComponents(j);
Xcentered = bsxfun(@minus, X, mu(j,:));
Xcentered = bsxfun(@times,sqrt(post(:,j)),Xcentered);
Sigma(:,:,j) = Xcentered'*Xcentered/S.PComponents(j)+ regVal*eye(d);
end
其中:
size(X) = [n,d]
size(mu) = [k,d]
size(Sigma) = [d,d,k]
size(PComponents) = [k]
就我而言,n介于1000和10,000之间,d大约为10,k介于2和15之间。