aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/optimizer_v2
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-09-10 15:44:20 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-09-10 15:52:05 -0700
commit700297614b694ece80b35753ecbc451a5e15fa77 (patch)
tree331ada24e2ceb404ef63fa735b6dd8fb190e8e07 /tensorflow/contrib/optimizer_v2
parente32029541ae270a021b266fcc3929b2528f8dff1 (diff)
Deterministic ordering of the hyperparameters in optimizer_v2
PiperOrigin-RevId: 212348918
Diffstat (limited to 'tensorflow/contrib/optimizer_v2')
-rw-r--r--tensorflow/contrib/optimizer_v2/optimizer_v2.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/tensorflow/contrib/optimizer_v2/optimizer_v2.py b/tensorflow/contrib/optimizer_v2/optimizer_v2.py
index f6ecaba834..6af59dcfbf 100644
--- a/tensorflow/contrib/optimizer_v2/optimizer_v2.py
+++ b/tensorflow/contrib/optimizer_v2/optimizer_v2.py
@@ -214,7 +214,8 @@ class _OptimizerV2State(object):
# with that Tensor cast to that dtype.
with ops.init_scope():
self._hyper = {name: {None: ops.convert_to_tensor(value, name=name)}
- for name, (dynamic, value) in hyper.items() if not dynamic}
+ for name, (dynamic, value) in sorted(hyper.items())
+ if not dynamic}
self._slots = {}
self._non_slot_dict = {}
# Extra state to help Optimizers implement Checkpointable. Holds information
@@ -231,7 +232,8 @@ class _OptimizerV2State(object):
ret._deferred_dependencies = self._deferred_dependencies
ret._deferred_slot_restorations = self._deferred_slot_restorations
ret._hyper = {name: {None: _resolve(value, name)}
- for name, (dynamic, value) in hyper.items() if dynamic}
+ for name, (dynamic, value) in sorted(hyper.items())
+ if dynamic}
ret._hyper.update(self._hyper)
ret._non_slot_devices = non_slot_devices
ret._distribution = distribution