0

我已經在Matlab中實現了CNN,但是我的實現花費了太多時間。我已經確定哪個部分比較耗時。以下是max-pooling的相關代碼:如何在MATLAB中高效實現Maxpooling?

%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

而不是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