aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/python/training/learning_rate_decay_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/python/training/learning_rate_decay_test.py')
-rw-r--r--tensorflow/python/training/learning_rate_decay_test.py84
1 files changed, 82 insertions, 2 deletions
diff --git a/tensorflow/python/training/learning_rate_decay_test.py b/tensorflow/python/training/learning_rate_decay_test.py
index 867301d4a1..083e3c21fa 100644
--- a/tensorflow/python/training/learning_rate_decay_test.py
+++ b/tensorflow/python/training/learning_rate_decay_test.py
@@ -18,6 +18,8 @@ from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
+import math
+
from tensorflow.python.framework import dtypes
from tensorflow.python.framework import test_util
from tensorflow.python.ops import state_ops
@@ -50,7 +52,7 @@ class LRDecayTest(test_util.TensorFlowTestCase):
self.assertAllClose(decayed_lr.eval(), .1, 1e-6)
# Decayed learning rate
assign_100.op.run()
- expected = .1 * 0.96**(100 // 3)
+ expected = .1 * 0.96 ** (100 // 3)
self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
def testVariables(self):
@@ -69,7 +71,7 @@ class LRDecayTest(test_util.TensorFlowTestCase):
self.assertAllClose(decayed_lr.eval(), .1, 1e-6)
# Decayed learning rate
assign_100.op.run()
- expected = .1 * 0.96**(100 // 3)
+ expected = .1 * 0.96 ** (100 // 3)
self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
def testPiecewiseConstant(self):
@@ -215,5 +217,83 @@ class SqrtDecayTest(test_util.TensorFlowTestCase):
self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
+class ExponentialDecayTest(test_util.TensorFlowTestCase):
+
+ def testDecay(self):
+ initial_lr = 0.1
+ k = 10
+ decay_rate = 0.96
+ step = state_ops.variable_op([], dtypes.int32)
+ assign_step = state_ops.assign(step, 0)
+ increment_step = state_ops.assign_add(step, 1)
+ decayed_lr = learning_rate_decay.natural_exp_decay(initial_lr, step,
+ k, decay_rate)
+ with self.test_session():
+ assign_step.op.run()
+ for i in range(k+1):
+ expected = initial_lr * math.exp(-i / k * decay_rate)
+ self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
+ increment_step.op.run()
+
+ def testStaircase(self):
+ initial_lr = 0.1
+ k = 10
+ decay_rate = 0.96
+ step = state_ops.variable_op([], dtypes.int32)
+ assign_step = state_ops.assign(step, 0)
+ increment_step = state_ops.assign_add(step, 1)
+ decayed_lr = learning_rate_decay.natural_exp_decay(initial_lr,
+ step,
+ k,
+ decay_rate,
+ staircase=True)
+ with self.test_session():
+ assign_step.op.run()
+ for i in range(k+1):
+ expected = initial_lr * math.exp(-decay_rate * (i // k))
+ self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
+ increment_step.op.run()
+
+
+class InverseDecayTest(test_util.TensorFlowTestCase):
+
+ def testDecay(self):
+ initial_lr = 0.1
+ k = 10
+ decay_rate = 0.96
+ step = state_ops.variable_op([], dtypes.int32)
+ assign_step = state_ops.assign(step, 0)
+ increment_step = state_ops.assign_add(step, 1)
+ decayed_lr = learning_rate_decay.inverse_time_decay(initial_lr,
+ step,
+ k,
+ decay_rate)
+ with self.test_session():
+ assign_step.op.run()
+ for i in range(k+1):
+ expected = initial_lr / (1 + i / k * decay_rate)
+ self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
+ increment_step.op.run()
+
+ def testStaircase(self):
+ initial_lr = 0.1
+ k = 10
+ decay_rate = 0.96
+ step = state_ops.variable_op([], dtypes.int32)
+ assign_step = state_ops.assign(step, 0)
+ increment_step = state_ops.assign_add(step, 1)
+ decayed_lr = learning_rate_decay.inverse_time_decay(initial_lr,
+ step,
+ k,
+ decay_rate,
+ staircase=True)
+ with self.test_session():
+ assign_step.op.run()
+ for i in range(k+1):
+ expected = initial_lr / (1 + decay_rate * (i // k))
+ self.assertAllClose(decayed_lr.eval(), expected, 1e-6)
+ increment_step.op.run()
+
+
if __name__ == "__main__":
googletest.main()