2013-06-26 40 views
0

假設我有一個權重矩陣Wnxm其中m是變量的數量,n是實例的數量。我也有相同大小的數據矩陣X。我嘗試爲X中的每個實例找到最接近的權向量。但是這兩個矩陣都是如此的尺寸,因此簡單的方法是不夠的。我在MATLAB中嘗試了一些GPU技巧,但它不能很好地工作,因爲它是按順序計算每個實例最接近的順序的方法。我現在正在尋找高效的一次性代碼。這需要所有的W和X,並用一些可能會添加一些GPU的MATLAB技巧找到勝者。有沒有人可以在MATLAB中建議任何代碼片段?查找數據矩陣中每個實例的最接近的權向量

這是我的順序

 x_in_d = gpuArray(x_in); % take input instance to device 
     W_d = gpuArray(W); % take weight matrix to device 
     Dx = W_d - x_in_d(ones(size(W_d,1),1),logical(ones(1,length(x_in_d)))); 
     [d_min,winner] = min(sum((Dx.^2)')); 
     d_min = gather(d_min); %gather results 
     winner = gather(winner); 
+3

你可以給你的「低效代碼」 - 一個工作,但是太慢?我們給你一個高效版本會更容易 - 你的描述需要相當多的解析... – Floris

+2

相關(如果不相同):http://stackoverflow.com/questions/17178500/subtracting-multiple -vectors-from-each-row-of-an-array-super-broadcasting/17179270#comment24877254_17179270 –

+0

如果'n'和'm'很大,將所有東西移動到GPU並返回的簡單行爲可能需要更多時間比整個CPU的計算還要多;這是GPGPU中最常遇到的陷阱之一。除非您發佈了您的問題和嘗試解決方案的基礎知識,否則我們無法真正幫助您。 –

回答

2

寫了什麼,你這麼維的意思做的事?這只是一個m×n的矩陣嗎?

如果您可以根據您的描述(這不是最清晰的)提供一些示例數據,那將非常有幫助,以下是我認爲您的數據的外觀。

權重=

[1 4 2

5 3 1]

數據=

[2 5 1

1 2 2]

你想要弄清哪一行權重最接近數據行?在這種情況下,這將是兩行數據的第一行權重。

請編輯你的問題,以澄清你的要求和考慮使用一些例子。

編輯:

我喜歡Rody's Dup。評論,如果我是正確的,檢查出:Link Here

+0

這裏是我的意思與尺寸太大nx太大m和我說的數據和重量矩陣形式不是矢量形式,所以它不是一個單一的行數據和重量 – erogol

+0

現在看我的答案,當我編輯我的答案,它刪除了換行符,並將它們作爲向量而不是矩陣,對此表示歉意 – Shaun314

+0

我得到了您添加的答案,Bishop的代碼運行得非常好。感謝您的通知:) – erogol

相關問題