From a935731bd3e01fcd753b1224b70ed9c8b4c2eb49 Mon Sep 17 00:00:00 2001 From: Sherlock Date: Wed, 2 Sep 2020 15:54:17 -0700 Subject: [PATCH] Neg Gradient (#5022) Co-authored-by: Sherlock Huang --- orttraining/orttraining/core/graph/gradient_builder.cc | 5 +++++ orttraining/orttraining/core/graph/gradient_builder.h | 1 + .../orttraining/core/graph/gradient_builder_registry.cc | 1 + orttraining/orttraining/test/gradient/gradient_ops_test.cc | 4 ++++ 4 files changed, 11 insertions(+) diff --git a/orttraining/orttraining/core/graph/gradient_builder.cc b/orttraining/orttraining/core/graph/gradient_builder.cc index 2440299ede..ba26ccc8af 100644 --- a/orttraining/orttraining/core/graph/gradient_builder.cc +++ b/orttraining/orttraining/core/graph/gradient_builder.cc @@ -1028,6 +1028,11 @@ IMPLEMENT_GRADIENT_BUILDER(GetDivGradient) { } } +IMPLEMENT_GRADIENT_BUILDER(GetNegGradient) { + return std::vector{ + NodeDef("Neg", {GO(0)}, {GI(0)})}; +} + IMPLEMENT_GRADIENT_BUILDER(GetReduceMeanGradient) { std::vector result; auto attributes = SrcNodeAttributes(); diff --git a/orttraining/orttraining/core/graph/gradient_builder.h b/orttraining/orttraining/core/graph/gradient_builder.h index 340cf8e5e8..02282a643f 100644 --- a/orttraining/orttraining/core/graph/gradient_builder.h +++ b/orttraining/orttraining/core/graph/gradient_builder.h @@ -24,6 +24,7 @@ DECLARE_GRADIENT_BUILDER(GetReluGradient) DECLARE_GRADIENT_BUILDER(GetAddSubGradient) DECLARE_GRADIENT_BUILDER(GetMulGradient) DECLARE_GRADIENT_BUILDER(GetDivGradient) +DECLARE_GRADIENT_BUILDER(GetNegGradient) DECLARE_GRADIENT_BUILDER(GetReduceMeanGradient) DECLARE_GRADIENT_BUILDER(GetReduceSumGradient) DECLARE_GRADIENT_BUILDER(GetReduceLogSumExpGradient) diff --git a/orttraining/orttraining/core/graph/gradient_builder_registry.cc b/orttraining/orttraining/core/graph/gradient_builder_registry.cc index 6cd85c13d2..11ef5ec6b8 100644 --- a/orttraining/orttraining/core/graph/gradient_builder_registry.cc +++ b/orttraining/orttraining/core/graph/gradient_builder_registry.cc @@ -60,6 +60,7 @@ void GradientBuilderRegistry::RegisterGradientBuilders() { REGISTER_GRADIENT_BUILDER("Sub", GetAddSubGradient); REGISTER_GRADIENT_BUILDER("Mul", GetMulGradient); REGISTER_GRADIENT_BUILDER("Div", GetDivGradient); + REGISTER_GRADIENT_BUILDER("Neg", GetNegGradient); REGISTER_GRADIENT_BUILDER("Concat", GetConcatGradient); REGISTER_GRADIENT_BUILDER("ConcatTraining", GetConcatTrainingGradient); REGISTER_GRADIENT_BUILDER("Reshape", GetReshapeGradient); diff --git a/orttraining/orttraining/test/gradient/gradient_ops_test.cc b/orttraining/orttraining/test/gradient/gradient_ops_test.cc index c1c84ae41f..8e12312071 100644 --- a/orttraining/orttraining/test/gradient/gradient_ops_test.cc +++ b/orttraining/orttraining/test/gradient/gradient_ops_test.cc @@ -395,6 +395,10 @@ TEST(GradientCheckerTest, SinGrad) { UnaryOpGradientTest("Sin"); } +TEST(GradientCheckerTest, NegGrad) { + UnaryOpGradientTest("Neg"); +} + TEST(GradientCheckerTest, LogGrad) { TensorShape shape({2,5,6});