如何在MATLAB中有效地实现Maxpooling?

时间:2016-11-07 17:30:22

标签: matlab machine-learning neural-network artificial-intelligence conv-neural-network

我已经在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分钟即可收敛 我怎样才能提高效率?

1 个答案:

答案 0 :(得分:1)

您可以使用blockproc代替kron来创建块索引,并使用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