如何在 MATLAB 中高效实现 Maxpooling?

How to efficiently implement Maxpooling in MATLAB?

我已经在 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 分钟。
我怎样才能让它更有效率?

您可以使用 kron 代替 blockproc 创建块的索引,并使用 accumarraymax 应用到每个块。假设行数和列数是偶数,并且假设 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