Как реализовать планировщик batch_size, используя обратный вызов на керасе

Я хочу создать планировщик batch_size, используя обратный вызов на keras (способом, аналогичным планировщику скорости обучения, который я пытаюсь имитировать в своем коде), но я не могу понять, как это сделать. Вот что я попробовал:

class BatchSizeScheduler(Callback):
      """Batch size scheduler.
      # Arguments
        schedule: a function that takes an epoch index as input
        (integer, indexed from 0) and current batch size
        and returns a new batch size as output (int).
        verbose: int. 0: quiet, 1: update messages.
     """
    def __init__(self, schedule, verbose=1):
         super(BatchSizeScheduler, self).__init__()
         self.schedule = schedule
         self.verbose = verbose

     def on_epoch_begin(self, epoch, logs=None):


         print(self.params)
         bs = self.params['batch_size']

         try:  # new API
            bs = self.schedule(epoch, bs=bs)
         except TypeError:  # old API for backward compatibility
            bs = self.schedule(epoch)
         if not isinstance(bs, (int, np.int32, np.int64)):
            raise ValueError('The output of the "schedule" function '
                         'should be integer.')

         self.params['batch_size'] =  bs 

         if self.verbose > 0:
             print('\nEpoch %05d: BatchSizeScheduler increasing batch '
                 'size to %s.' % (epoch + 1, self.params['batch_size']))

Проблема в том, что это не обновляет размер партии во время обучения. Печать (self.params) показывает увеличивающийся размер пакета, но я могу сказать по индикатору хода обучения, что алгоритм продолжает использовать тот же, исходный размер пакета. Я подозреваю, что способ обновления параметра (self.params['batch_size']=bs) неправильный?

Любая помощь могла бы быть полезна!

0 ответов

Другие вопросы по тегам