fix redundant part
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+import six
+
+
class ManualScheduleTrigger(object):
"""Trigger invoked at specified point(s) of iterations or epochs.
This trigger accepts iterations or epochs indicated by given point(s).
There are two ways to specify the point(s): iteration and epoch.
- `iteration` means the number of updates, while `epoch` means the number
+ ``iteration`` means the number of updates, while ``epoch`` means the number
of sweeps over the training dataset. Fractional values are allowed
- if the point is a number of epochs; the trigger uses the `iteration`
- and `epoch_detail` attributes defined by the updater.
+ if the point is a number of epochs; the trigger uses the ``iteration``
+ and ``epoch_detail`` attributes defined by the updater.
Args:
points (int, float, or list of int or float): time of the trigger.
@@ -18,11 +23,10 @@ class ManualScheduleTrigger(object):
"""
def __init__(self, points, unit):
- self.points = points if isinstance(points, list) else [points]
+ self.points = (points if isinstance(points, list) else [points])
assert unit == 'epoch' or unit == 'iteration'
self.unit = unit
- self.count = [0 for _ in range(len(self.points))]
- self.valid = [True for _ in range(len(self.points))]
+ self.valid = [True] * len(self.points)
def __call__(self, trainer):
"""Decides whether the extension should be called on this iteration.
@@ -37,13 +41,15 @@ class ManualScheduleTrigger(object):
iteration.
"""
+
updater = trainer.updater
if self.unit == 'epoch':
- prev = self.count
- self.count = [updater.epoch_detail // p for p in self.points]
- flag = [p != c for p, c in zip(prev, self.count)]
- ans = any([f and v for f, v in zip(flag, self.valid)])
- self.valid = [not f and v for f, v in zip(flag, self.valid)]
+ flag = [updater.epoch_detail >= p and v for (p, v) in
+ six.moves.zip(self.points, self.valid)]
+ ans = any([f and v for (f, v) in six.moves.zip(flag,
+ self.valid)])
+ self.valid = [not f and v for (f, v) in six.moves.zip(flag,
+ self.valid)]
return ans
else:
iteration = updater.iteration
