【发布时间】:2014-10-07 20:28:52
【问题描述】:
下面是我的神经网络前向传播代码。我想加快速度。至于循环需要时间,任何机构都可以帮助纠正代码以加快速度,比如matlab说vectorzing等。 在这段代码中,我每次从大小为 19x19 的输入中获取 4x4 的感受野,然后将每个像素乘以 4x4 的权重(大小为 19x19 的 net.w{layer_no}(u,v))。也可以说是两者的点积。我没有直接做两个小矩阵的点积,因为有边界检查。它提供了一个 6x6 的输出,最后保存在 output 中。我不是经验丰富的编码员,所以我尽我所能。任何人都可以指导我如何加快速度,因为与 Opencv 相比需要很多时间。会很感激。问候
receptiveSize = 4;
overlap= 1;
inhibatory = 0;
gap = receptiveSize-overlap;
UpperLayerSize = size(net.b{layer_no}); % 6x6
Curr_layerSize = size(net.w{layer_no}); % 19x19
for u=1:UpperLayerSize(1)-1
for v=1:UpperLayerSize(2)-1
summed_value=0;
min_u = (u - 1) * gap + 1;
max_u = (u - 1) * gap + receptiveSize;
min_v = (v - 1) * gap + 1;
max_v = (v - 1) * gap + receptiveSize;
for i = min_u : max_u
for j = min_v : max_v
if(i>Curr_layerSize(1) || j>Curr_layerSize(2))
continue;
end
if(i<1 || j<1)
continue;
end
summed_value = summed_value + input{layer_no}.images(i,j,sample_ind) * net.w{layer_no}(i,j);
end
end
summed_value = summed_value + net.b{layer_no}(u,v);
input{layer_no+1}.images(u,v,sample_ind) = summed_value;
end
end
temp = activate_Mat(input{layer_no+1}.images(:,:,sample_ind),net.AF{layer_no});
output{layer_no}.images(:,:,sample_ind) = temp(:,:);
【问题讨论】:
-
好吧,除了 i 和 j 以外,还有什么意思吗?为什么不是 i 和 j?
-
哦,好吧,我没注意到....
-
你能提供一些你正在使用的矩阵吗?
-
@m_power 任意两个大小相等的矩阵,例如 a=randn(19,19); b=randn(19,19);
标签: matlab opencv optimization neural-network vectorization