MPSCNNPoolingMaxGradient(3) MetalPerformanceShaders.framework MPSCNNPoolingMaxGradient(3)
NAME
MPSCNNPoolingMaxGradient
SYNOPSIS
#import <MPSCNNPooling.h>
Inherits MPSCNNPoolingGradient.
Instance Methods
(nonnull instancetype) - initWithDevice:kernelWidth:kernelHeight:strideInPixelsX:strideInPixelsY:
(nullable instancetype) - initWithCoder:device:
Additional Inherited Members
Detailed Description
This depends on Metal.framework Specifies the filter for computing the gradient of the max pooling filter. The operation backpropagates a
gradient vector using chain rule.
Dilated Max pooling forward pass is defined as:
out(x) = max_{dx in Window(x)} in(s*x+D*dx), where
the pooling window definition 'Window(x)' follows MPSCNNPooling specification, 's' is the pixel stride and in() is the source input image
and D is the dilation factor. For MPSCNNPoolingMaxGradient the dilationRate 'D' is one. NOTE: For even-sized pooling windows with dilation
rate greater than one the effective pooling window is centered around s*x with non-even windows leaning towards top-left corner. For
example if kernel width = 2, dilation rate = 3, then the pooling considers positions '-2' and '+1' relative to the pooling window center
's*x'.
Hence the partial derivative of the output value wrt. to the input value needed in the gradient backpropagation in MPSCNNPoolingGradient
is:
d out(x)/d in(y) = delta_{x_m, y}, where
delta_{x,y} is the Kronecker delta symbol (see MPSCNNPoolingAverageGradient) and x_m is the index of the maximum value in the corresponding
pooling window.
In practice this means that the gradient value for the destination image at pixel 'x' is the sum over these contributions coming from all
pooling windows that contribute to the max pooling computation in the forward pass, multiplied by the input gradient value in the source
area of the corresponding pooling window. If there are multiple maximal values within a single pooling window one of them is picked for the
gradient and this decision is implementation specific, which means that it can vary between different architectures and even between
different filter parameters.
Note: The gradient max pooling needs the secondary input image in order to compute the indices of maximal values for each pooling window,
but this means redundant computations. Later we may add encode calls to MPSCNNPoolingMax that produce a state that contains the coordinates
of the maximal values to be consumed by the gradient filters.
Method Documentation
- (nullable instancetype) initWithCoder: (NSCoder *__nonnull) aDecoder(nonnull id< MTLDevice >) device
NSSecureCoding compatability See MPSKernel::initWithCoder.
Parameters:
aDecoder The NSCoder subclass with your serialized MPSCNNPoolingMaxGradient
device The MTLDevice on which to make the MPSCNNPoolingMaxGradient
Returns:
A new MPSCNNPoolingMaxGradient object, or nil if failure.
Reimplemented from MPSCNNPoolingGradient.
- (nonnull instancetype) initWithDevice: (nonnull id< MTLDevice >) device(NSUInteger) kernelWidth(NSUInteger) kernelHeight(NSUInteger)
strideInPixelsX(NSUInteger) strideInPixelsY
Initialize a gradient max pooling filter
Parameters:
device The device the filter will run on
kernelWidth The width of the kernel. Can be an odd or even value.
kernelHeight The height of the kernel. Can be an odd or even value.
strideInPixelsX The input stride (upsampling factor) in the x dimension.
strideInPixelsY The input stride (upsampling factor) in the y dimension.
Returns:
A valid MPSCNNPoolingGradient object or nil, if failure.
Reimplemented from MPSCNNPoolingGradient.
Author
Generated automatically by Doxygen for MetalPerformanceShaders.framework from the source code.
Version MetalPerformanceShaders-100 Thu Feb 8 2018 MPSCNNPoolingMaxGradient(3)