diff options
author | Manjunath Kudlur <keveman@gmail.com> | 2015-11-06 16:27:58 -0800 |
---|---|---|
committer | Manjunath Kudlur <keveman@gmail.com> | 2015-11-06 16:27:58 -0800 |
commit | f41959ccb2d9d4c722fe8fc3351401d53bcf4900 (patch) | |
tree | ef0ca22cb2a5ac4bdec9d080d8e0788a53ed496d /tensorflow/python/training/adagrad.py |
TensorFlow: Initial commit of TensorFlow library.
TensorFlow is an open source software library for numerical computation
using data flow graphs.
Base CL: 107276108
Diffstat (limited to 'tensorflow/python/training/adagrad.py')
-rw-r--r-- | tensorflow/python/training/adagrad.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tensorflow/python/training/adagrad.py b/tensorflow/python/training/adagrad.py new file mode 100644 index 0000000000..41cf2e00f4 --- /dev/null +++ b/tensorflow/python/training/adagrad.py @@ -0,0 +1,58 @@ +"""Adagrad for TensorFlow.""" +from tensorflow.python.framework import ops +from tensorflow.python.ops import constant_op +from tensorflow.python.training import optimizer +from tensorflow.python.training import training_ops + + +class AdagradOptimizer(optimizer.Optimizer): + """Optimizer that implements the Adagrad algorithm. + + @@__init__ + """ + + def __init__(self, learning_rate, initial_accumulator_value=0.1, + use_locking=False, name="Adagrad"): + """Construct a new Adagrad optimizer. + + Args: + learning_rate: A `Tensor` or a floating point value. The learning rate. + initial_accumulator_value: A floating point value. + Starting value for the accumulators, must be positive. + use_locking: If `True` use locks for update operations. + name: Optional name prefix for the operations created when applying + gradients. Defaults to "Adagrad". + + Raises: + ValueError: If the initial_accumulator_value is invalid. + """ + if initial_accumulator_value <= 0.0: + raise ValueError("initial_accumulator_value must be positive: %s" % + initial_accumulator_value) + super(AdagradOptimizer, self).__init__(use_locking, name) + self._learning_rate = learning_rate + self._initial_accumulator_value = initial_accumulator_value + # Created in Initialize. + self._learning_rate_tensor = None + + def _create_slots(self, var_list): + for v in var_list: + val = constant_op.constant(self._initial_accumulator_value, + shape=v.get_shape()) + self._get_or_make_slot(v, val, "accumulator", self._name) + + def _prepare(self): + self._learning_rate_tensor = ops.convert_to_tensor(self._learning_rate, + name="learning_rate") + + def _apply_dense(self, grad, var): + acc = self.get_slot(var, "accumulator") + return training_ops.apply_adagrad( + var, acc, self._learning_rate_tensor, grad, + use_locking=self._use_locking) + + def _apply_sparse(self, grad, var): + acc = self.get_slot(var, "accumulator") + return training_ops.sparse_apply_adagrad( + var, acc, self._learning_rate_tensor, grad.values, grad.indices, + use_locking=self._use_locking) |