public MaxPoolLayer(IAllocator allocator, DType elementType, int batchSize, long nInputPlane, long inputWidth, long inputHeight, ConvolutionDesc2d cd, bool ceilMode = true) { this.cd = cd; this.ceilMode = ceilMode; var inputSizes = new long[] { batchSize, nInputPlane, inputWidth, inputHeight }; var outputSizes = CpuMaxPoolingOps.OutputSize(inputSizes, ceilMode, cd); this.OutputSizes = outputSizes; this.activation = new NDArray(allocator, elementType, outputSizes); this.indices = new NDArray(allocator, elementType, outputSizes); this.gradInput = new NDArray(allocator, elementType, inputSizes); }
public override NDArray Backward(NDArray input, NDArray gradOutput, ModelMode mode) { CpuMaxPoolingOps.SpatialMaxPoolingBackward(input, gradOutput, gradInput, indices, cd, ceilMode); return(gradInput); }
public override NDArray Forward(NDArray input, ModelMode mode) { CpuMaxPoolingOps.SpatialMaxPoolingForward(input, activation, indices, cd, ceilMode); return(activation); }
public override Tensor Backward(Tensor input, Tensor gradOutput, ModelMode mode) { CpuMaxPoolingOps.SpatialMaxPoolingBackward(input, gradOutput, gradInput, indices, cd, ceilMode); return(gradInput); }