Browse Source

Added gradients for acos, asin, atan

pull/784/head
Lee Reid 4 years ago
parent
commit
b0cba0a606
1 changed files with 51 additions and 0 deletions
  1. +51
    -0
      src/TensorFlowNET.Core/Gradients/math_grad.cs

+ 51
- 0
src/TensorFlowNET.Core/Gradients/math_grad.cs View File

@@ -634,6 +634,23 @@ namespace Tensorflow.Gradients
});
}

[RegisterGradient("Asin")]
public static Tensor[] _ASinGrad(Operation op, Tensor[] grads)
{
var grad = grads[0];
var x = op.inputs[0];

return tf_with(ops.control_dependencies(grads), delegate
{
x = math_ops.conj(x);
// the derivative of
// y = asin(x)
// is
// d/dx asin(x) = 1 / sqrt(1-x*x)
return new Tensor[] { math_ops.multiply(grad, 1 / gen_math_ops.sqrt(1 - gen_math_ops.square(x))) };
});
}

[RegisterGradient("Sin")]
public static Tensor[] _SinGrad(Operation op, Tensor[] grads)
{
@@ -660,6 +677,23 @@ namespace Tensorflow.Gradients
});
}

[RegisterGradient("Acos")]
public static Tensor[] _ACosGrad(Operation op, Tensor[] grads)
{
var grad = grads[0];
var x = op.inputs[0];

return tf_with(ops.control_dependencies(grads), delegate
{
// the derivative of
// y = acos(x)
// is
// d/dx acos(x) = -1 / sqrt(1-x*x) = -d/dx asin(x)
x = math_ops.conj(x);
return new Tensor[] { math_ops.multiply(grad, -1 / gen_math_ops.sqrt(1 - gen_math_ops.square(x))) };
});
}

[RegisterGradient("Cos")]
public static Tensor[] _CosGrad(Operation op, Tensor[] grads)
{
@@ -686,6 +720,23 @@ namespace Tensorflow.Gradients
});
}

[RegisterGradient("Atan")]
public static Tensor[] _ATanGrad(Operation op, Tensor[] grads)
{
var grad = grads[0];
var x = op.inputs[0];

return tf_with(ops.control_dependencies(grads), delegate
{
// the derivative of
// y = atan(x)
// is
// d/dx atan(x) = 1 / (1 + x*x)
x = math_ops.conj(x);
return new Tensor[] { math_ops.multiply(grad, 1 / (1 + gen_math_ops.square(x))) };
});
}

[RegisterGradient("Tanh")]
public static Tensor[] _TanhGrad(Operation op, Tensor[] grads)
{


Loading…
Cancel
Save