有没有办法在 MATLAB 中加速这段代码?
Is there a way to speed up this piece of code in MATLAB?
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 x 32 CMY 图像输入的通道分解为 3 x 3 重叠矩阵,将它们重新整形为向量,加 1 并乘以矩阵 Theta,以获得(卷积神经网络的)特征图作为输出。
尝试更改此行:
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。
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 x 32 CMY 图像输入的通道分解为 3 x 3 重叠矩阵,将它们重新整形为向量,加 1 并乘以矩阵 Theta,以获得(卷积神经网络的)特征图作为输出。
尝试更改此行:
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。