license import { backend_util , KernelConfig , KernelFunc , MaxPoolGrad , MaxPoolGradAttrs , MaxPoolGradInputs , TensorInfo } from '@tensorflow/tfjs-core' ; import { MathBackendWebGL } from '../backend_webgl' ; import { MaxPool2DBackpropProgram } from '../max_pool_backprop_gpu' ; import { Pool2DProgram } from '../pool_gpu' ; import { assertNotComplex } from '../webgl_util' ; export function maxPoolGrad ( args ) { const { inputs , backend , attrs } = args ; const { dy , input , output } = inputs ; const x = input ; assertNotComplex ( [ input , output ] , 'maxPoolGrad' ) ; const { filterSize , strides , pad , dimRoundingMode } = attrs ; const convInfo = backend_util . computePool2DInfo ( x . shape as [ number , number , number , number ] , filterSize , strides , 1 , pad , dimRoundingMode ) ; const getPositions = true ; const maxPoolPositionsProgram = new Pool2DProgram ( convInfo , 'max' , getPositions ) ; const maxPoolPositions = backend . runWebGLProgram ( maxPoolPositionsProgram , [ x ] , x . dtype ) ; const maxPoolBackPropProgram = new MaxPool2DBackpropProgram ( convInfo ) ; const result = backend . runWebGLProgram ( maxPoolBackPropProgram , [ dy , maxPoolPositions ] , x . dtype ) ; backend . disposeIntermediateTensorInfo ( maxPoolPositions ) ; return result ; } export const maxPoolGradConfig = { kernelName : MaxPoolGrad , backendName : 'webgl' , kernelFunc : maxPoolGrad as { } as KernelFunc } ;