| @@ -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) | |||
| { | |||