1 #include "caffe2/operators/conv_op.h" 2 #include "caffe2/operators/conv_op_impl.h" 3 #include "caffe2/operators/conv_pool_op_base.h" 7 REGISTER_CPU_OPERATOR(ConvGradient, ConvGradientOp<float, CPUContext>);
8 OPERATOR_SCHEMA(ConvGradient).NumInputs(2, 3).NumOutputs(1, 3);
10 REGISTER_CPU_OPERATOR(Conv1DGradient, ConvGradientOp<float, CPUContext>);
11 OPERATOR_SCHEMA(Conv1DGradient).NumInputs(2, 3).NumOutputs(1, 3);
13 REGISTER_CPU_OPERATOR(Conv2DGradient, ConvGradientOp<float, CPUContext>);
14 OPERATOR_SCHEMA(Conv2DGradient).NumInputs(2, 3).NumOutputs(1, 3);
16 REGISTER_CPU_OPERATOR(Conv3DGradient, ConvGradientOp<float, CPUContext>);
17 OPERATOR_SCHEMA(Conv3DGradient).NumInputs(2, 3).NumOutputs(1, 3);
20 using GradientMakerBase::GradientMakerBase;
21 vector<OperatorDef> GetGradientDefs()
override {
22 CAFFE_ENFORCE(def_.input_size() == 3 || def_.input_size() == 2);
26 auto compute_dX = !argsHelper.GetSingleArgument<
bool>(
"no_gradient_to_input", 0);
28 if (def_.input_size() == 3) {
31 def_.type() +
"Gradient",
33 vector<string>{I(0), I(1), GO(0)},
34 vector<string>{GI(1), GI(2), GI(0)});
37 def_.type() +
"Gradient",
39 vector<string>{I(0), I(1), GO(0)},
40 vector<string>{GI(1), GI(2)});
45 def_.type() +
"Gradient",
47 vector<string>{I(0), I(1), GO(0)},
48 vector<string>{GI(1), GI(0)},
49 vector<Argument>{MakeArgument<int>(
"no_bias", 1)});
52 def_.type() +
"Gradient",
54 vector<string>{I(0), I(1), GO(0)},
55 vector<string>{GI(1)},
56 vector<Argument>{MakeArgument<int>(
"no_bias", 1)});
A helper class to index into arguments.
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...
static vector< OperatorDef > SingleGradientDef(const Args &...args)
a helper function to allow one to create one single operator def, which is usually the case for many ...