Download object_detection/builders/optimizer_builder_test.py from pat229988/DR-App: direct link, hf CLI and curl.
- Browser
- Download file 6.91 kB
-
https://huggingface.co/spaces/pat229988/DR-App/resolve/main/object_detection/builders/optimizer_builder_test.py
- Command line
-
hf download hf://spaces/pat229988/DR-App/object_detection/builders/optimizer_builder_test.py
-
curl -L -o optimizer_builder_test.py https://huggingface.co/spaces/pat229988/DR-App/resolve/main/object_detection/builders/optimizer_builder_test.py
6.91 kB
| # Copyright 2017 The TensorFlow Authors. All Rights Reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # ============================================================================== | |
| """Tests for optimizer_builder.""" | |
| import tensorflow as tf | |
| from google.protobuf import text_format | |
| from object_detection.builders import optimizer_builder | |
| from object_detection.protos import optimizer_pb2 | |
| class LearningRateBuilderTest(tf.test.TestCase): | |
| def testBuildConstantLearningRate(self): | |
| learning_rate_text_proto = """ | |
| constant_learning_rate { | |
| learning_rate: 0.004 | |
| } | |
| """ | |
| learning_rate_proto = optimizer_pb2.LearningRate() | |
| text_format.Merge(learning_rate_text_proto, learning_rate_proto) | |
| learning_rate = optimizer_builder._create_learning_rate( | |
| learning_rate_proto) | |
| self.assertTrue(learning_rate.op.name.endswith('learning_rate')) | |
| with self.test_session(): | |
| learning_rate_out = learning_rate.eval() | |
| self.assertAlmostEqual(learning_rate_out, 0.004) | |
| def testBuildExponentialDecayLearningRate(self): | |
| learning_rate_text_proto = """ | |
| exponential_decay_learning_rate { | |
| initial_learning_rate: 0.004 | |
| decay_steps: 99999 | |
| decay_factor: 0.85 | |
| staircase: false | |
| } | |
| """ | |
| learning_rate_proto = optimizer_pb2.LearningRate() | |
| text_format.Merge(learning_rate_text_proto, learning_rate_proto) | |
| learning_rate = optimizer_builder._create_learning_rate( | |
| learning_rate_proto) | |
| self.assertTrue(learning_rate.op.name.endswith('learning_rate')) | |
| self.assertTrue(isinstance(learning_rate, tf.Tensor)) | |
| def testBuildManualStepLearningRate(self): | |
| learning_rate_text_proto = """ | |
| manual_step_learning_rate { | |
| initial_learning_rate: 0.002 | |
| schedule { | |
| step: 100 | |
| learning_rate: 0.006 | |
| } | |
| schedule { | |
| step: 90000 | |
| learning_rate: 0.00006 | |
| } | |
| warmup: true | |
| } | |
| """ | |
| learning_rate_proto = optimizer_pb2.LearningRate() | |
| text_format.Merge(learning_rate_text_proto, learning_rate_proto) | |
| learning_rate = optimizer_builder._create_learning_rate( | |
| learning_rate_proto) | |
| self.assertTrue(isinstance(learning_rate, tf.Tensor)) | |
| def testBuildCosineDecayLearningRate(self): | |
| learning_rate_text_proto = """ | |
| cosine_decay_learning_rate { | |
| learning_rate_base: 0.002 | |
| total_steps: 20000 | |
| warmup_learning_rate: 0.0001 | |
| warmup_steps: 1000 | |
| hold_base_rate_steps: 20000 | |
| } | |
| """ | |
| learning_rate_proto = optimizer_pb2.LearningRate() | |
| text_format.Merge(learning_rate_text_proto, learning_rate_proto) | |
| learning_rate = optimizer_builder._create_learning_rate( | |
| learning_rate_proto) | |
| self.assertTrue(isinstance(learning_rate, tf.Tensor)) | |
| def testRaiseErrorOnEmptyLearningRate(self): | |
| learning_rate_text_proto = """ | |
| """ | |
| learning_rate_proto = optimizer_pb2.LearningRate() | |
| text_format.Merge(learning_rate_text_proto, learning_rate_proto) | |
| with self.assertRaises(ValueError): | |
| optimizer_builder._create_learning_rate(learning_rate_proto) | |
| class OptimizerBuilderTest(tf.test.TestCase): | |
| def testBuildRMSPropOptimizer(self): | |
| optimizer_text_proto = """ | |
| rms_prop_optimizer: { | |
| learning_rate: { | |
| exponential_decay_learning_rate { | |
| initial_learning_rate: 0.004 | |
| decay_steps: 800720 | |
| decay_factor: 0.95 | |
| } | |
| } | |
| momentum_optimizer_value: 0.9 | |
| decay: 0.9 | |
| epsilon: 1.0 | |
| } | |
| use_moving_average: false | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| optimizer, _ = optimizer_builder.build(optimizer_proto) | |
| self.assertTrue(isinstance(optimizer, tf.train.RMSPropOptimizer)) | |
| def testBuildMomentumOptimizer(self): | |
| optimizer_text_proto = """ | |
| momentum_optimizer: { | |
| learning_rate: { | |
| constant_learning_rate { | |
| learning_rate: 0.001 | |
| } | |
| } | |
| momentum_optimizer_value: 0.99 | |
| } | |
| use_moving_average: false | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| optimizer, _ = optimizer_builder.build(optimizer_proto) | |
| self.assertTrue(isinstance(optimizer, tf.train.MomentumOptimizer)) | |
| def testBuildAdamOptimizer(self): | |
| optimizer_text_proto = """ | |
| adam_optimizer: { | |
| learning_rate: { | |
| constant_learning_rate { | |
| learning_rate: 0.002 | |
| } | |
| } | |
| } | |
| use_moving_average: false | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| optimizer, _ = optimizer_builder.build(optimizer_proto) | |
| self.assertTrue(isinstance(optimizer, tf.train.AdamOptimizer)) | |
| def testBuildMovingAverageOptimizer(self): | |
| optimizer_text_proto = """ | |
| adam_optimizer: { | |
| learning_rate: { | |
| constant_learning_rate { | |
| learning_rate: 0.002 | |
| } | |
| } | |
| } | |
| use_moving_average: True | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| optimizer, _ = optimizer_builder.build(optimizer_proto) | |
| self.assertTrue( | |
| isinstance(optimizer, tf.contrib.opt.MovingAverageOptimizer)) | |
| def testBuildMovingAverageOptimizerWithNonDefaultDecay(self): | |
| optimizer_text_proto = """ | |
| adam_optimizer: { | |
| learning_rate: { | |
| constant_learning_rate { | |
| learning_rate: 0.002 | |
| } | |
| } | |
| } | |
| use_moving_average: True | |
| moving_average_decay: 0.2 | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| optimizer, _ = optimizer_builder.build(optimizer_proto) | |
| self.assertTrue( | |
| isinstance(optimizer, tf.contrib.opt.MovingAverageOptimizer)) | |
| # TODO(rathodv): Find a way to not depend on the private members. | |
| self.assertAlmostEqual(optimizer._ema._decay, 0.2) | |
| def testBuildEmptyOptimizer(self): | |
| optimizer_text_proto = """ | |
| """ | |
| optimizer_proto = optimizer_pb2.Optimizer() | |
| text_format.Merge(optimizer_text_proto, optimizer_proto) | |
| with self.assertRaises(ValueError): | |
| optimizer_builder.build(optimizer_proto) | |
| if __name__ == '__main__': | |
| tf.test.main() | |