358 def __init__(self, model, data_loader, num_iter):
359 """
360 Args:
361 model (nn.Module): a module whose all BN layers in training mode will be
362 updated by precise BN.
363 Note that user is responsible for ensuring the BN layers to be
364 updated are in training mode when this hook is triggered.
365 data_loader (iterable): it will produce data to be run by `model(data)`.
366 num_iter (int): number of iterations used to compute the precise
367 statistics.
368 """
369 self._logger = logging.getLogger(__name__)
370 if len(get_bn_modules(model)) == 0:
371 self._logger.info(
372 "PreciseBN is disabled because model does not contain BN layers in training mode."
373 )
374 self._disabled = True
375 return
376
377 self._model = model
378 self._data_loader = data_loader
379 self._num_iter = num_iter
380 self._disabled = False
381
382 self._data_iter = None
383