| 238 | REGISTER_GRADIENT_OP("Conv2D", Conv2DGrad); |
| 239 | |
| 240 | Status MaxPoolGradHelper(const Scope& scope, const Operation& op, |
| 241 | const std::vector<Output>& grad_inputs, |
| 242 | std::vector<Output>* grad_outputs) { |
| 243 | string data_format; |
| 244 | string padding; |
| 245 | std::vector<int32> strides; |
| 246 | std::vector<int32> ksize; |
| 247 | auto attrs = op.output(0).node()->attrs(); |
| 248 | TF_RETURN_IF_ERROR(GetNodeAttr(attrs, "data_format", &data_format)); |
| 249 | TF_RETURN_IF_ERROR(GetNodeAttr(attrs, "ksize", &ksize)); |
| 250 | TF_RETURN_IF_ERROR(GetNodeAttr(attrs, "padding", &padding)); |
| 251 | TF_RETURN_IF_ERROR(GetNodeAttr(attrs, "strides", &strides)); |
| 252 | auto dx = internal::MaxPoolGrad( |
| 253 | scope, op.input(0), op.output(0), grad_inputs[0], ksize, strides, padding, |
| 254 | internal::MaxPoolGrad::DataFormat(data_format)); |
| 255 | grad_outputs->push_back(dx); |
| 256 | return scope.status(); |
| 257 | } |
| 258 | REGISTER_GRADIENT_OP("MaxPool", MaxPoolGradHelper); |
| 259 | |
| 260 | Status MaxPoolGradV2Helper(const Scope& scope, const Operation& op, |
nothing calls this directly
no test coverage detected