0
Input = rand(32,32,3); 
Theta = rand(10,16); 


Output = zeros(30,30,3,16); % preallocate 
for i = 1:30 
    for j = 1:30 
      Output(i,j,:,:) = permute(cat(2,ones(1,1,3),reshape(Input(i:i+2,j:j+2,1:3),1,9,3)), [2 3 1]).'*Theta; 
    end 
end 

哎!我知道這裏有很多事情要做,但也許有一種方法可以加快速度。這段代碼將32個通道分解爲32個CMY圖像輸入3×3重疊的矩陣,將它們重新整形成向量,加1並乘以矩陣Theta,得到(卷積神經網絡的)特徵映射作爲輸出。有沒有辦法在MATLAB中加速這段代碼?

+1

你能把它寫在矩陣表單中嗎? – Royi

+0

@Drazick你是什麼意思? –

+0

@ĬnfernalSeraphím大概有一個方程式,你試圖變成代碼。這個方程是什麼(在矩陣和運算符方面)? – GJStein

回答

4

嘗試改變這一行:

Output(i,j,:,:) = permute(cat(2,ones(1,1,3),reshape(Input(i:i+2,j:j+2,1:3),1,9,3)), [2 3 1]).'*Theta; 

要這樣:

Output2(i,j,:,:) = [1 1 1; reshape(Input(i:i+2,j:j+2,:),9,3,1)].'*Theta; 

平均一千循環在這裏,有一個速度從16.3ms高達6.9ms上的代碼。

+0

哇......你無法想象我有多開心,非常感謝你! –

相關問題