我已经在Matlab中实现了CNN,但是我的实现花费了太多时间。我已经确定哪个部分更耗时。它是下面的max-pooling相关代码:
%blockwise operation
fun = @(block_struct) max_matrix(block_struct.data);
%downsampling
maxpool = cell(number_feature_map,1);
for i=1:number_feature_map
maxpool{i}=blockproc(y{i},[2 2],fun);
end
function [maximum]=max_matrix(A)
maximum=max(A(:));
如果没有这个(缩减采样),只需2分钟即可收敛 我怎样才能提高效率?
答案 0 :(得分:1)
您可以使用blockproc
代替kron
来创建块索引,并使用accumarray
将max
应用于每个块。假设行数和列数是偶数,并假设data
是大小为[6,8]
的随机矩阵
r = 6 ,c=8
idx = kron(reshape(1:(r*c/4),c/2,[]).',ones(2))
for ii=1:number_feature_map
data = rand(r,c);
maxpool{ii} = reshape(accumarray(idx(:),data(:),[],@max),c/2,[]).';
end