---
title: "maxPooling2DGradient(withGradientTensor:indicesTensor:outputShape:descriptor:name:)"
framework: metalperformanceshadersgraph
role: symbol
role_heading: Instance Method
path: "metalperformanceshadersgraph/mpsgraph/maxpooling2dgradient(withgradienttensor:indicestensor:outputshape:descriptor:name:)"
---

# maxPooling2DGradient(withGradientTensor:indicesTensor:outputShape:descriptor:name:)

Creates a max-pooling gradient operation and returns the result tensor.

## Declaration

```swift
func maxPooling2DGradient(withGradientTensor gradient: MPSGraphTensor, indicesTensor indices: MPSGraphTensor, outputShape: [NSNumber], descriptor: MPSGraphPooling2DOpDescriptor, name: String?) -> MPSGraphTensor
```

## Parameters

- `gradient`: A 2D input gradient tensor - must be of rank=4. The layout is defined by descriptor.dataLayout.
- `indices`: The indices tensor returned from doc://com.apple.metalperformanceshadersgraph/documentation/MetalPerformanceShadersGraph/MPSGraph/maxPooling2DReturnIndices(_:descriptor:name:).
- `outputShape`: The shape of the destination gradient.
- `descriptor`: A pooling operation descriptor that specifies pooling window sizes, strides, dilation rates, paddings and layouts.
- `name`: The name for the operation.

## Return Value

Return Value Destination gradient tensor.

## Discussion

Discussion With this API MPSGraph computes the max-pooling gradient efficiently by reusing the indices from the forward API instead of recomputing them. The descriptor must set returnIndicesMode and returnIndicesDataType to the same value as that set by the forward pass.
