虽然我使用KMEANS_RANDOM_CENTERS
标志(随机性正在工作),但在boost :: threadGroup(对于多线程)中使用opencv kmeans时,我仍然保持相同的结果当不使用boost :: thread组时)。没有在使用boost :: threadGroup时在opencv kmeans中随机初始化
这是我打电话给我的k均值在一个boost ::线程组:
boost::thread_group threadGroup
for(int i=0; i < numDescs; i++)
{
threadGroup.create_thread(boost::bind(&applyKmeansRand, matDescs[i], matCenters[i], numClusters));
}
threadGroup.join_all();
这是我打电话的功能:
void applyKmeansRand(Mat& matDesc,Mat& matCenters,int numClusters)
{
Mat bestlabels;
TermCriteria criteria;
kmeans(matDesc, numClusters, bestlabels, criteria, 1, KMEANS_RANDOM_CENTERS, matCenters);
}
有没有一种可能性,即随机数发生器kmeans函数内部工作不正常?
它会在每次运行后或每次编译后生成相同的数字吗?前者是一个播种问题,后者是一个......更大的问题。 – erip
即使在重新编译之后......我甚至将最大迭代次数设置为1,但仍然在每次运行和编译之后都继续获得相同的输出。我正在'threadGroup.create_thread'块中运行kmeans进行平行化,也许这会以某种方式终止随机初始化? 也许一些明确的随机播种也可以帮助... – mcExchange
似乎确实是一个问题与boost :: threadGroup我会适应我的问题,并进一步寻找答案。在最坏的情况下,我将不得不平行我的代码,然后使用boost :: threadGroup – mcExchange