假設我有一個權重矩陣W
nxm其中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);
你可以給你的「低效代碼」 - 一個工作,但是太慢?我們給你一個高效版本會更容易 - 你的描述需要相當多的解析... – Floris
相關(如果不相同):http://stackoverflow.com/questions/17178500/subtracting-multiple -vectors-from-each-row-of-an-array-super-broadcasting/17179270#comment24877254_17179270 –
如果'n'和'm'很大,將所有東西移動到GPU並返回的簡單行爲可能需要更多時間比整個CPU的計算還要多;這是GPGPU中最常遇到的陷阱之一。除非您發佈了您的問題和嘗試解決方案的基礎知識,否則我們無法真正幫助您。 –