有没有办法在MATLAB中加速这段代码?

时间:2015-07-19 16:14:42

标签: matlab optimization multidimensional-array neural-network matrix-multiplication

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,得到(卷积神经网络)特征图作为输出。

1 个答案:

答案 0 :(得分: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