MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / Conv2DBackpropInputGrad

Function Conv2DBackpropInputGrad

tensorflow/cc/gradients/nn_grad.cc:397–440  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

395REGISTER_GRADIENT_OP("FractionalMaxPool", FractionalMaxPoolGradHelper);
396
397Status Conv2DBackpropInputGrad(const Scope& scope, const Operation& op,
398 const std::vector<Output>& grad_inputs,
399 std::vector<Output>* grad_outputs) {
400 if (op.num_inputs() != 3) {
401 return errors::InvalidArgument("Conv2DBackpropInput requires 3 inputs.");
402 }
403 if (grad_inputs.empty()) {
404 return errors::InvalidArgument(
405 "Conv2DBackpropInput grad requires 1 grad input");
406 }
407
408 std::vector<int> dilations, strides, explicit_paddings;
409 bool use_cudnn_on_gpu;
410 std::string data_format, padding;
411 TF_RETURN_IF_ERROR(GetNodeAttr(op.node()->attrs(), "dilations", &dilations));
412 TF_RETURN_IF_ERROR(GetNodeAttr(op.node()->attrs(), "strides", &strides));
413 TF_RETURN_IF_ERROR(
414 GetNodeAttr(op.node()->attrs(), "explicit_paddings", &explicit_paddings));
415 TF_RETURN_IF_ERROR(
416 GetNodeAttr(op.node()->attrs(), "use_cudnn_on_gpu", &use_cudnn_on_gpu));
417 TF_RETURN_IF_ERROR(
418 GetNodeAttr(op.node()->attrs(), "data_format", &data_format));
419 TF_RETURN_IF_ERROR(GetNodeAttr(op.node()->attrs(), "padding", &padding));
420
421 grad_outputs->push_back(NoGradient());
422
423 Conv2DBackpropFilter::Attrs filter_attrs;
424 filter_attrs.use_cudnn_on_gpu_ = use_cudnn_on_gpu;
425 filter_attrs.explicit_paddings_ = explicit_paddings;
426 filter_attrs.data_format_ = data_format;
427 filter_attrs.dilations_ = dilations;
428 grad_outputs->push_back(
429 Conv2DBackpropFilter(scope, grad_inputs[0], Shape(scope, op.input(1)),
430 op.input(2), strides, padding, filter_attrs));
431
432 Conv2D::Attrs conv_attrs;
433 conv_attrs.use_cudnn_on_gpu_ = use_cudnn_on_gpu;
434 conv_attrs.explicit_paddings_ = explicit_paddings;
435 conv_attrs.data_format_ = data_format;
436 conv_attrs.dilations_ = dilations;
437 grad_outputs->push_back(
438 Conv2D(scope, grad_inputs[0], op.input(1), strides, padding, conv_attrs));
439 return scope.status();
440}
441REGISTER_GRADIENT_OP("Conv2DBackpropInput", Conv2DBackpropInputGrad);
442
443} // anonymous namespace

Callers

nothing calls this directly

Calls 13

InvalidArgumentFunction · 0.85
NoGradientFunction · 0.85
GetNodeAttrFunction · 0.50
Conv2DBackpropFilterFunction · 0.50
ShapeClass · 0.50
Conv2DFunction · 0.50
num_inputsMethod · 0.45
emptyMethod · 0.45
attrsMethod · 0.45
nodeMethod · 0.45
push_backMethod · 0.45
inputMethod · 0.45

Tested by

no test coverage detected