max pooling

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:张弛
链接:http://www.zhihu.com/question/23437871/answer/74301025
来源:知乎

此程序为汤晓鸥实验室人脸识别公开程序,为了讨论粘贴至此,文章引用: Z. Zhu, P. Luo, X. Wang, and X. Tang, Deep Learning Identity Preserving Face Space,in Proceedings of IEEE International Conference on Computer Vision (ICCV) 2013 这是引用max pooling的程序:inputMap = neuronOutputMap;
inputSize = outputSize;
poolSize = 3;
poolStride = 2;
[outputMap, outputSize] = max_pooling(inputMap, inputSize, poolSize, poolStride);
下面是max pooling函数function [outputMap, outputSize] =  max_pooling(inputMap, inputSize, poolSize, poolStride)
% =========================================================================
% INPUTS:
%        inputMap - input map of the max-pooling layer
%        inputSize - X-size(equivalent to Y-size) of input map
%        poolSize - X-size(equivalent to Y-size) of receptive field
%        poolStride -  the stride size between successive pooling squares.
% OUTPUT:
%        outputMap - output map of the max-pooling layer
%        outputSize - X-size(equivalently, Y-size) of output map
% =========================================================================
outputSize = inputSize/ poolStride;
inputChannel = size(inputMap, 3);

padMap = padarray(inputMap, [poolSize poolSize],0, 'post');
outputMap = zeros(outputSize, outputSize, inputChannel, 'single');

for j = 1:outputSize
    for i = 1:outputSize
        startX = 1 + (i-1)*poolStride;
        startY = 1 + (j-1)*poolStride;
        poolField = padMap(startY:startY+poolSize-1,startX:startX+poolSize-1,:);
        poolOut = max(reshape(poolField, [poolSize*poolSize,inputChannel]),[],1);
        outputMap(j,i,:) = reshape(poolOut,[1 1 inputChannel]);
    end
end

你可能感兴趣的:(计算机视觉)