Я пытаюсь понять, как Tensorflow регистрирует градиенты для своих операторов в целом.
Я проверил код в tensorflow/core/ops
, tensorflow/python/ops
и tensorflow/cc/gradients
. Похоже, что все три компонента обеспечивают градиентную регистрацию для аналогичных операций. Например,
# In tensorflow/python/ops/math_grad.py
@ops.RegisterGradient("BatchMatMul")
def _BatchMatMul():
...
// In tensorflow/core/ops/math_grad.cc
Status BatchMatMulGrad(attrs, g){...}
REGISTER_OP_GRADIENT("BatchMatMul", BatchMatMulGrad);
// In tensorflow/cc/gradients/math_grad.cc
Status BatchMatMulGrad(...){...}
REGISTER_GRADIENT_OP("BatchMatMul", BatchMatMulGrad);
Какой смысл иметь двойное определение градиента для тех же операторов?