Example #1
0
 def __init__(self, args):
     self._max_trigger = util.get_trigger((args.epochs, 'epoch'))
     self._interval_trigger = util.get_trigger(
         (args.save_interval_iters, 'iteration'))
     self.start_time = args.start_time
     self.time_limit = args.time_limit * 60
     self.max_epochs = args.epochs
Example #2
0
    def __init__(self, check_trigger=(1, 'epoch'), monitor='main/loss',
                 patience=None, mode='auto', verbose=False,
                 max_trigger=(100, 'epoch'), **kwargs):

        # `patients` as an alias of `patience`
        patients, = argument.parse_kwargs(kwargs, ('patients', None))
        if patients is None:
            if patience is None:
                patience = 3
            else:
                pass
        else:
            if patience is None:
                patience = patients
            else:
                raise TypeError(
                    'Both \'patience\' and \'patients\' arguments are '
                    'specified. \'patients\' is an alias of the former. '
                    'Specify only \'patience\'.')

        self.count = 0
        self.patience = patience
        self.monitor = monitor
        self.verbose = verbose
        self.already_warning = False
        self._max_trigger = util.get_trigger(max_trigger)
        self._interval_trigger = util.get_trigger(check_trigger)

        self._init_summary()

        if mode == 'max':
            self._compare = operator.gt

        elif mode == 'min':
            self._compare = operator.lt

        else:
            if 'accuracy' in monitor:
                self._compare = operator.gt

            else:
                self._compare = operator.lt

        if self._compare == operator.gt:
            if verbose:
                print('early stopping: operator is greater')
            self.best = float('-inf')

        else:
            if verbose:
                print('early stopping: operator is less')
            self.best = float('inf')
Example #3
0
 def __init__(self,
              key,
              patience,
              compare,
              trigger=(1, 'epoch'),
              max_trigger=(1000, 'epoch')):
     self._key = key
     self._patience = patience
     self._waited = 0
     self._best_value = None
     self._interval_trigger = util.get_trigger(trigger)
     self._max_trigger = util.get_trigger(max_trigger)
     self._init_summary()
     self._compare = compare
 def __init__(self, key, compare, trigger=(1, 'epoch'), print_triger=False):
     self._key = key
     self._best_value = None
     self._interval_trigger = util.get_trigger(trigger)
     self._init_summary()
     self._compare = compare
     self._print_triger = print_triger
    def run_test_early_stopping_trigger_with_accuracy(self):
        comm = self.communicator
        key = 'main/accuracy'
        trigger = MultiNodeEarlyStoppingTrigger(comm,
                                                monitor=key,
                                                patience=3,
                                                check_trigger=(1, 'epoch'),
                                                verbose=False)
        trigger = util.get_trigger(trigger)

        accuracies = [
            0.5, 0.5, 0.5, 0.5, 0.6, 0.6, 0.7, 0.7, 0.6, 0.6, 0.4, 0.4, 0.3,
            0.3, 0.2, 0.2
        ]
        accuracies = [x * (1 - comm.rank / comm.size) for x in accuracies]
        accuracies = [
            chainer.Variable(self.xp.asarray(acc, dtype=np.float32))
            for acc in accuracies
        ]

        expected = [
            False, False, False, False, False, False, False, False, False,
            False, False, False, False, True, False, True
        ]
        _test_trigger(self, trigger, key, accuracies, expected)
 def __init__(self, max_epoch, key, stop_condition=None, eps=1e-3,
              trigger=(1, 'epoch')):
     self.max_epoch = max_epoch
     self.eps = eps
     self._key = key
     self._current_value = None
     self._interval_trigger = util.get_trigger(trigger)
     self._init_summary()
     self.stop_condition = stop_condition or self._stop_condition
Example #7
0
    def __init__(
            self, numerator_key, denominator_key, result_key,
            trigger=(1, 'epoch')):
        self._trigger = util.get_trigger(trigger)

        self._numerator_key = numerator_key
        self._denominator_key = denominator_key
        self._result_key = result_key
        self._numerator = 0
        self._denominator = 0
Example #8
0
    def setUp(self):
        self.optimizer = mock.MagicMock()
        self.extension = extensions.Multistep(
            'x', self.base_lr, self.gamma, self.step_value, self.optimizer)

        self.interval = 1
        self.expect = [e for e in self.expect for _ in range(self.interval)]
        self.trigger = util.get_trigger((self.interval, 'iteration'))

        self.trainer = testing.get_trainer_with_mock_updater(self.trigger)
        self.trainer.updater.get_optimizer.return_value = self.optimizer
Example #9
0
    def setUp(self):
        self.optimizer = mock.MagicMock()
        self.extension = extensions.ExponentialShift(
            'x', self.rate, self.init, self.target, self.optimizer)

        self.interval = 4
        self.expect = [e for e in self.expect for _ in range(self.interval)]
        self.trigger = util.get_trigger((self.interval, 'iteration'))

        self.trainer = testing.get_trainer_with_mock_updater(self.trigger)
        self.trainer.updater.get_optimizer.return_value = self.optimizer
Example #10
0
    def setUp(self):
        self.optimizer = mock.MagicMock()
        self.extension = extensions.MultistepShift(
            'x', self.gamma, self.step_value, self.init, self.optimizer)

        self.interval = 1
        self.expect = [e for e in self.expect for _ in range(self.interval)]
        self.trigger = util.get_trigger((self.interval, 'iteration'))

        self.trainer = testing.get_trainer_with_mock_updater(self.trigger)
        self.trainer.updater.get_optimizer.return_value = self.optimizer
Example #11
0
    def __init__(self,
                 numerator_key,
                 denominator_key,
                 result_key,
                 trigger=(1, 'epoch')):
        self._trigger = util.get_trigger(trigger)

        self._numerator_key = numerator_key
        self._denominator_key = denominator_key
        self._result_key = result_key
        self._numerator = 0
        self._denominator = 0
Example #12
0
 def __init__(self,
              key,
              compare,
              trigger=(1, 'epoch'),
              best_value=None,
              verbose=True):
     self._key = key
     self._best_value = best_value
     self._interval_trigger = util.get_trigger(trigger)
     self._init_summary()
     self._compare = compare
     self.verbose = verbose
Example #13
0
 def __init__(self,
              max_epoch,
              key,
              stop_condition=None,
              eps=0.01,
              trigger=(1, 'epoch')):
     self.max_epoch = max_epoch
     self.eps = eps
     self._key = key
     self._best_value = None
     self._interval_trigger = util.get_trigger(trigger)
     self._init_summary()
Example #14
0
    def __init__(self,
                 check_trigger=(1, 'epoch'),
                 monitor='main/loss',
                 patients=3,
                 mode='auto',
                 verbose=False,
                 max_trigger=(100, 'epoch')):

        self.count = 0
        self.patients = patients
        self.monitor = monitor
        self.verbose = verbose
        self.already_warning = False
        self._max_trigger = util.get_trigger(max_trigger)
        self._interval_trigger = util.get_trigger(check_trigger)

        self._init_summary()

        if mode == 'max':
            self._compare = operator.gt

        elif mode == 'min':
            self._compare = operator.lt

        else:
            if 'accuracy' in monitor:
                self._compare = operator.gt

            else:
                self._compare = operator.lt

        if self._compare == operator.gt:
            if verbose:
                print('early stopping: operator is greater')
            self.best = float('-inf')

        else:
            if verbose:
                print('early stopping: operator is less')
            self.best = float('inf')
    def test_early_stopping_trigger_with_loss(self):
        key = 'main/loss'
        trigger = triggers.EarlyStoppingTrigger(monitor=key, patients=3,
                                                check_trigger=(1, 'epoch'))
        trigger = util.get_trigger(trigger)

        accuracies = [100, 80, 30, 10, 20, 24, 30, 35]
        accuracies = numpy.asarray([
            chainer.Variable(numpy.asarray(acc, dtype=numpy.float32))
            for acc in accuracies])

        expected = [False, False, False, False, False, False, True, True]
        _test_trigger(self, trigger, key, accuracies, expected)
    def test_early_stopping_trigger_with_loss(self):
        key = 'main/loss'
        trigger = triggers.EarlyStoppingTrigger(monitor=key, patience=3,
                                                check_trigger=(1, 'epoch'))
        trigger = util.get_trigger(trigger)

        accuracies = [100, 80, 30, 10, 20, 24, 30, 35]
        accuracies = numpy.asarray([
            chainer.Variable(numpy.asarray(acc, dtype=numpy.float32))
            for acc in accuracies])

        expected = [False, False, False, False, False, False, True, True]
        _test_trigger(self, trigger, key, accuracies, expected)
Example #17
0
    def __init__(self, comm, original_key, aggregated_key=None,
                 comm_trigger=(1, 'iteration'), aggregator=None):
        self.comm = comm
        self.original_key = original_key

        if aggregated_key is None:
            self.aggregated_key = original_key
        else:
            self.aggregated_key = aggregated_key

        self.comm_trigger = util.get_trigger(comm_trigger)
        self.observation_history = []

        self.aggregator = aggregator or _average_2d
    def __init__(self, triggers, max_trigger=(100, 'epoch')):
        self._triggers = list(triggers)
        self._max_trigger = util.get_trigger(max_trigger)

        # find minimum training length
        lengths = [
            t.get_training_length() for t in triggers
            if hasattr(t, 'get_training_length')
        ]
        lengths = sorted(lengths,
                         key=lambda x: (1 if x[1] == 'epoch' else 0, x[0]),
                         reverse=True)
        self._training_length = lengths[0] or max_trigger
        logger.info('training length: {}'.format(self._training_length))
    def test_early_stopping_trigger_with_accuracy(self):
        key = 'main/accuracy'
        trigger = triggers.EarlyStoppingTrigger(monitor=key, patients=3,
                                                check_trigger=(1, 'epoch'),
                                                verbose=False)
        trigger = util.get_trigger(trigger)

        accuracies = [0.5, 0.5, 0.6, 0.7, 0.6, 0.4, 0.3, 0.2]
        accuracies = numpy.asarray([
            chainer.Variable(numpy.asarray(acc, dtype=numpy.float32))
            for acc in accuracies])

        expected = [False, False, False, False, False, False, True, True]
        _test_trigger(self, trigger, key, accuracies, expected)
    def test_early_stopping_trigger_with_accuracy(self):
        key = 'main/accuracy'
        trigger = triggers.EarlyStoppingTrigger(monitor=key, patience=3,
                                                check_trigger=(1, 'epoch'),
                                                verbose=False)
        trigger = util.get_trigger(trigger)

        accuracies = [0.5, 0.5, 0.6, 0.7, 0.6, 0.4, 0.3, 0.2]
        accuracies = numpy.asarray([
            chainer.Variable(numpy.asarray(acc, dtype=numpy.float32))
            for acc in accuracies])

        expected = [False, False, False, False, False, False, True, True]
        _test_trigger(self, trigger, key, accuracies, expected)
Example #21
0
    def __init__(self, check_trigger=(1, 'epoch'), monitor='main/loss',
                 patients=3, mode='auto', verbose=False,
                 max_trigger=(100, 'epoch')):

        self.count = 0
        self.patients = patients
        self.monitor = monitor
        self.verbose = verbose
        self.already_warning = False
        self._max_trigger = util.get_trigger(max_trigger)
        self._interval_trigger = util.get_trigger(check_trigger)

        self._init_summary()

        if mode == 'max':
            self._compare = operator.gt

        elif mode == 'min':
            self._compare = operator.lt

        else:
            if 'accuracy' in monitor:
                self._compare = operator.gt

            else:
                self._compare = operator.lt

        if self._compare == operator.gt:
            if verbose:
                print('early stopping: operator is greater')
            self.best = float('-inf')

        else:
            if verbose:
                print('early stopping: operator is less')
            self.best = float('inf')
Example #22
0
    def __init__(self, key, compare, trigger=(1, 'epoch'),
                 n_times=5, max_trigger=None, print_triger=False):
        self.period = max_trigger
        self.unit = 'epoch'

        self._key = key
        self._best_value = None
        self._interval_trigger = util.get_trigger(trigger)
        self._init_summary()
        self._compare = compare
        self._print_triger = print_triger

        self._n_times = n_times
        self._n_fails = 0

        self._max_trigger = max_trigger
        self._n_triggers = 0
Example #23
0
    def __init__(self,
                 max_epoch,
                 key,
                 stop_condition=None,
                 eps=0.0001,
                 trigger=(1, 'epoch'),
                 early_stopping=5):
        self.max_epoch = max_epoch
        self.eps = eps
        self.early_stopping = early_stopping
        self._key = key
        self._current_value = None
        self._interval_trigger = util.get_trigger(trigger)
        self._init_summary()
        self.stop_condition = stop_condition or self._stop_condition

        self.f1_scores_dev = []
    def __init__(self,
                 trigger=(1, 'epoch'),
                 monitor='main/loss',
                 patients=3,
                 mode='auto',
                 verbose=False,
                 max_epoch=100,
                 debug=False):

        self.count = 0
        self.patients = patients
        self.monitor = monitor
        self.verbose = verbose
        self.debug = debug
        self.max_epoch = max_epoch
        self.already_warning = False
        self._interval_trigger = util.get_trigger(trigger)
        self.listeners = []

        self._init_summary()

        if mode == 'max':
            self._compare = greater

        elif mode == 'min':
            self._compare = less

        else:
            if 'accuracy' in monitor:
                self._compare = greater

            else:
                self._compare = less

        if self._compare == greater:
            if verbose:
                print('early stopping: operator is greater')
            self.best = -1 * (1 << 50)

        else:
            if verbose:
                print('early stopping: operator is less')
            self.best = 1 << 50
    def setUp(self):
        self.trainer = _get_mocked_trainer()

        self.interval = 4
        self.expect = [e for e in self.expect for _ in range(self.interval)]
        self.trigger = get_trigger((self.interval, 'iteration'))
Example #26
0
    def setUp(self):
        self.trainer = _get_mocked_trainer()

        self.interval = 4
        self.expect = [e for e in self.expect for _ in range(self.interval)]
        self.trigger = get_trigger((self.interval, 'iteration'))
 def __init__(self, key, compare, trigger=(1, 'epoch')):
     self._key = key
     self._best_value = None
     self._interval_trigger = util.get_trigger(trigger)
     self._init_summary()
     self._compare = compare