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

哇......你无法想象我有多开心,非常感谢你! –

相关问题