diff options
author | A. Unique TensorFlower <gardener@tensorflow.org> | 2018-09-26 17:42:47 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-09-26 17:46:19 -0700 |
commit | 7b88cabfec45c9e04ab3d9cf1c2411c6dce4c694 (patch) | |
tree | 9bdc598fa33808d8689299438a50ad7445ebdec5 /tensorflow/core/ops/math_grad_test.cc | |
parent | bfda65cc70526c919c57ef8321dd282e463ed8a3 (diff) |
Add xlogy and xdivy op.
PiperOrigin-RevId: 214700693
Diffstat (limited to 'tensorflow/core/ops/math_grad_test.cc')
-rw-r--r-- | tensorflow/core/ops/math_grad_test.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tensorflow/core/ops/math_grad_test.cc b/tensorflow/core/ops/math_grad_test.cc index 5ee79809ac..9fc6b34147 100644 --- a/tensorflow/core/ops/math_grad_test.cc +++ b/tensorflow/core/ops/math_grad_test.cc @@ -909,6 +909,46 @@ TEST_F(MathGradTest, ComplexPow) { } #endif // TENSORFLOW_USE_SYCL +TEST_F(MathGradTest, Xlogy) { + auto x = test::AsTensor<float>({0.f, 0.f, 2.f, 3.f, 4.f, 5.f}, + TensorShape({2, 3})); + auto y = test::AsTensor<float>({.5f, 2.f}, TensorShape({2, 1})); + Tensor dx; + Tensor dy; + auto g = [](float x, float y) -> float { return x == 0. ? 0. : std::log(y); }; + auto h = [](float x, float y) -> float { return x == 0. ? 0. : x / y; }; + SymGrad("Xlogy", x, y, &dx, &dy); + test::ExpectClose( + dx, test::AsTensor<float>({g(0.f, .5f), g(0.f, 0.f), g(2.f, .5f), + g(3.f, 2.f), g(4.f, 2.f), g(5.f, 2.f)}, + TensorShape({2, 3}))); + test::ExpectClose( + dy, test::AsTensor<float>({h(0.f, .5f) + h(0.f, 0.f) + h(2.f, .5f), + h(3.f, 2.f) + h(4.f, 2.f) + h(5.f, 2.f)}, + TensorShape({2, 1}))); +} + +TEST_F(MathGradTest, Xdivy) { + auto x = test::AsTensor<float>({0.f, 0.f, 2.f, 3.f, 4.f, 5.f}, + TensorShape({2, 3})); + auto y = test::AsTensor<float>({.5f, 2.f}, TensorShape({2, 1})); + Tensor dx; + Tensor dy; + auto g = [](float x, float y) -> float { return x == 0. ? 0. : 1 / y; }; + auto h = [](float x, float y) -> float { + return x == 0. ? 0. : -x / (y * y); + }; + SymGrad("Xdivy", x, y, &dx, &dy); + test::ExpectClose( + dx, test::AsTensor<float>({g(0.f, .5f), g(0.f, 0.f), g(2.f, .5f), + g(3.f, 2.f), g(4.f, 2.f), g(5.f, 2.f)}, + TensorShape({2, 3}))); + test::ExpectClose( + dy, test::AsTensor<float>({h(0.f, .5f) + h(0.f, 0.f) + h(2.f, .5f), + h(3.f, 2.f) + h(4.f, 2.f) + h(5.f, 2.f)}, + TensorShape({2, 1}))); +} + TEST_F(MathGradTest, Maximum) { auto x = test::AsTensor<float>({-3.f, -2.f, -1.f, 1.f, 2.f, 3.f}, TensorShape({2, 3})); |