雖然我使用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