diff --git a/tensorflow_privacy/privacy/optimizers/dp_optimizer.py b/tensorflow_privacy/privacy/optimizers/dp_optimizer.py index 3706bf0..73e0fd6 100644 --- a/tensorflow_privacy/privacy/optimizers/dp_optimizer.py +++ b/tensorflow_privacy/privacy/optimizers/dp_optimizer.py @@ -228,12 +228,15 @@ def make_gaussian_optimizer_class(cls): AdagradOptimizer = tf.train.AdagradOptimizer AdamOptimizer = tf.train.AdamOptimizer GradientDescentOptimizer = tf.train.GradientDescentOptimizer +RMSPropOptimizer = tf.train.RMSPropOptimizer DPAdagradOptimizer = make_optimizer_class(AdagradOptimizer) DPAdamOptimizer = make_optimizer_class(AdamOptimizer) DPGradientDescentOptimizer = make_optimizer_class(GradientDescentOptimizer) +DPRMSPropOptimizer = make_optimizer_class(RMSPropOptimizer) DPAdagradGaussianOptimizer = make_gaussian_optimizer_class(AdagradOptimizer) DPAdamGaussianOptimizer = make_gaussian_optimizer_class(AdamOptimizer) DPGradientDescentGaussianOptimizer = make_gaussian_optimizer_class( GradientDescentOptimizer) +DPRMSPropGaussianOptimizer = make_gaussian_optimizer_class(RMSPropOptimizer) diff --git a/tensorflow_privacy/privacy/optimizers/dp_optimizer_test.py b/tensorflow_privacy/privacy/optimizers/dp_optimizer_test.py index ebd2261..2032a58 100644 --- a/tensorflow_privacy/privacy/optimizers/dp_optimizer_test.py +++ b/tensorflow_privacy/privacy/optimizers/dp_optimizer_test.py @@ -48,7 +48,13 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): ('DPAdagrad 4', dp_optimizer.DPAdagradOptimizer, 4, [-2.5, -2.5]), ('DPAdam 1', dp_optimizer.DPAdamOptimizer, 1, [-2.5, -2.5]), ('DPAdam 2', dp_optimizer.DPAdamOptimizer, 2, [-2.5, -2.5]), - ('DPAdam 4', dp_optimizer.DPAdamOptimizer, 4, [-2.5, -2.5])) + ('DPAdam 4', dp_optimizer.DPAdamOptimizer, 4, [-2.5, -2.5]), + ('DPRMSPropOptimizer 1', dp_optimizer.DPRMSPropOptimizer, 1, + [-2.5, -2.5]), + ('DPRMSPropOptimizer 2', dp_optimizer.DPRMSPropOptimizer, 2, + [-2.5, -2.5]), + ('DPRMSPropOptimizer 4', dp_optimizer.DPRMSPropOptimizer, 4, [-2.5, -2.5]) + ) def testBaseline(self, cls, num_microbatches, expected_answer): with self.cached_session() as sess: var0 = tf.Variable([1.0, 2.0]) @@ -76,7 +82,8 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): @parameterized.named_parameters( ('DPGradientDescent', dp_optimizer.DPGradientDescentOptimizer), ('DPAdagrad', dp_optimizer.DPAdagradOptimizer), - ('DPAdam', dp_optimizer.DPAdamOptimizer)) + ('DPAdam', dp_optimizer.DPAdamOptimizer), + ('DPRMSPropOptimizer', dp_optimizer.DPRMSPropOptimizer)) def testClippingNorm(self, cls): with self.cached_session() as sess: var0 = tf.Variable([0.0, 0.0]) @@ -99,7 +106,8 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): @parameterized.named_parameters( ('DPGradientDescent', dp_optimizer.DPGradientDescentOptimizer), ('DPAdagrad', dp_optimizer.DPAdagradOptimizer), - ('DPAdam', dp_optimizer.DPAdamOptimizer)) + ('DPAdam', dp_optimizer.DPAdamOptimizer), + ('DPRMSPropOptimizer', dp_optimizer.DPRMSPropOptimizer)) def testNoiseMultiplier(self, cls): with self.cached_session() as sess: var0 = tf.Variable([0.0]) @@ -182,7 +190,8 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): @parameterized.named_parameters( ('DPGradientDescent', dp_optimizer.DPGradientDescentOptimizer), ('DPAdagrad', dp_optimizer.DPAdagradOptimizer), - ('DPAdam', dp_optimizer.DPAdamOptimizer)) + ('DPAdam', dp_optimizer.DPAdamOptimizer), + ('DPRMSPropOptimizer', dp_optimizer.DPRMSPropOptimizer)) def testUnrollMicrobatches(self, cls): with self.cached_session() as sess: var0 = tf.Variable([1.0, 2.0]) @@ -213,7 +222,8 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): @parameterized.named_parameters( ('DPGradientDescent', dp_optimizer.DPGradientDescentGaussianOptimizer), ('DPAdagrad', dp_optimizer.DPAdagradGaussianOptimizer), - ('DPAdam', dp_optimizer.DPAdamGaussianOptimizer)) + ('DPAdam', dp_optimizer.DPAdamGaussianOptimizer), + ('DPRMSPropOptimizer', dp_optimizer.DPRMSPropGaussianOptimizer)) def testDPGaussianOptimizerClass(self, cls): with self.cached_session() as sess: var0 = tf.Variable([0.0]) @@ -241,7 +251,8 @@ class DPOptimizerTest(tf.test.TestCase, parameterized.TestCase): @parameterized.named_parameters( ('DPGradientDescent', dp_optimizer.DPGradientDescentOptimizer), ('DPAdagrad', dp_optimizer.DPAdagradOptimizer), - ('DPAdam', dp_optimizer.DPAdamOptimizer)) + ('DPAdam', dp_optimizer.DPAdamOptimizer), + ('DPRMSPropOptimizer', dp_optimizer.DPRMSPropOptimizer)) def testAssertOnNoCallOfComputeGradients(self, cls): dp_sum_query = gaussian_query.GaussianSumQuery(1.0e9, 0.0) opt = cls(dp_sum_query, num_microbatches=1, learning_rate=1.0)