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

有没有办法在MATLAB中加速这段代码?,matlab,optimization,multidimensional-array,neural-network,matrix-multiplication,Matlab,Optimization,Multidimensional Array,Neural Network,Matrix Multiplication,唷!我知道这里有很多事情要做,但也许有一种方法可以加速。此代码将输入的32×32 CMY图像通道分解为3×3重叠矩阵,将其重塑为向量,加1并乘以矩阵θ,以获得(卷积神经网络的)特征图作为输出。尝试更改此行: 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,:,:) =

唷!我知道这里有很多事情要做,但也许有一种方法可以加速。此代码将输入的32×32 CMY图像通道分解为3×3重叠矩阵,将其重塑为向量,加1并乘以矩阵θ,以获得(卷积神经网络的)特征图作为输出。

尝试更改此行:

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
为此:

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;

这里平均1000个循环,代码上的速度从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
为此:

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;

这里平均1000个循环,代码上的速度从16.3ms提高到6.9ms

你能用矩阵形式写吗?@Drazick你是什么意思?@Ĭnfernalsegraphím你大概想把一个等式转换成代码。这个等式是什么(以矩阵和运算符的形式)?您希望加快代码速度的操作有多大?代码本身看起来很好。请用“Rafaely”检查答案,你能用矩阵形式写吗?@Drazick你是什么意思?@nfernalSeraphím你大概想把一个等式转换成代码。这个等式是什么(以矩阵和运算符的形式)?您希望加快代码速度的操作有多大?代码本身看起来很好。请用@Rafael检查答案