| 28 | return MNN::PoolPadType_CAFFE; |
| 29 | } |
| 30 | static VARP _PoolGrad(VARP originInput, VARP originOutput, VARP inputGrad, INTS kernel, INTS stride, PoolingMode type, |
| 31 | PaddingMode pad = VALID, INTS pads= {0, 0}) { |
| 32 | std::unique_ptr<MNN::OpT> pool(new MNN::OpT); |
| 33 | pool->type = MNN::OpType_PoolGrad; |
| 34 | pool->main.type = MNN::OpParameter_Pool; |
| 35 | pool->main.value = new MNN::PoolT; |
| 36 | if (kernel[0] == -1 && kernel[1] == -1) { |
| 37 | pool->main.AsPool()->isGlobal = true; |
| 38 | } |
| 39 | pool->main.AsPool()->padX = 0; |
| 40 | pool->main.AsPool()->padY = 0; |
| 41 | if (pads.size() >= 2) { |
| 42 | pool->main.AsPool()->padX = pads[0]; |
| 43 | pool->main.AsPool()->padY = pads[1]; |
| 44 | } |
| 45 | pool->main.AsPool()->padType = _convertPoollingPadMode(pad); |
| 46 | pool->main.AsPool()->kernelX = kernel[0]; |
| 47 | pool->main.AsPool()->kernelY = kernel[1]; |
| 48 | pool->main.AsPool()->strideX = stride[0]; |
| 49 | pool->main.AsPool()->strideY = stride[1]; |
| 50 | pool->main.AsPool()->type = (MNN::PoolType)type; |
| 51 | return (Variable::create(Expr::create(std::move(pool), {originInput, originOutput, inputGrad}))); |
| 52 | } |
| 53 | |
| 54 | |
| 55 | class PoolGradTest : public MNNTestCase { |
no test coverage detected