| 262 | REGISTER_OP_GRADIENT("MaxPoolGrad", MaxPoolGradGrad); |
| 263 | |
| 264 | Status BiasAddGrad(const AttrSlice& attrs, FunctionDef* g) { |
| 265 | // clang-format off |
| 266 | *g = FDH::Define( |
| 267 | // Arg defs |
| 268 | {"input: T", "bias: T", "grad: T"}, |
| 269 | // Ret val defs |
| 270 | {"grad: T", "bias_grad: T"}, |
| 271 | // Attr defs |
| 272 | {{"T: {float, double}"}, |
| 273 | GetConvnetDataFormatAttrString()}, |
| 274 | // Nodes |
| 275 | { |
| 276 | {{"bias_grad"}, "BiasAddGrad", {"grad"}, |
| 277 | /*Attrs=*/{{"T", "$T"}, |
| 278 | {"data_format", "$data_format"}}} |
| 279 | }); |
| 280 | // clang-format on |
| 281 | return Status::OK(); |
| 282 | } |
| 283 | REGISTER_OP_GRADIENT("BiasAdd", BiasAddGrad); |
| 284 | |
| 285 | } // end namespace tensorflow |