Launch training.
(self)
| 269 | return self._iter |
| 270 | |
| 271 | def run(self) -> None: |
| 272 | """Launch training.""" |
| 273 | self.runner.call_hook('before_train') |
| 274 | # In iteration-based training loop, we treat the whole training process |
| 275 | # as a big epoch and execute the corresponding hook. |
| 276 | self.runner.call_hook('before_train_epoch') |
| 277 | if self._iter > 0: |
| 278 | print_log( |
| 279 | f'Advance dataloader {self._iter} steps to skip data ' |
| 280 | 'that has already been trained', |
| 281 | logger='current', |
| 282 | level=logging.WARNING) |
| 283 | for _ in range(self._iter): |
| 284 | next(self.dataloader_iterator) |
| 285 | while self._iter < self._max_iters and not self.stop_training: |
| 286 | self.runner.model.train() |
| 287 | |
| 288 | data_batch = next(self.dataloader_iterator) |
| 289 | self.run_iter(data_batch) |
| 290 | |
| 291 | self._decide_current_val_interval() |
| 292 | if (self.runner.val_loop is not None |
| 293 | and self._iter >= self.val_begin |
| 294 | and (self._iter % self.val_interval == 0 |
| 295 | or self._iter == self._max_iters)): |
| 296 | self.runner.val_loop.run() |
| 297 | |
| 298 | self.runner.call_hook('after_train_epoch') |
| 299 | self.runner.call_hook('after_train') |
| 300 | return self.runner.model |
| 301 | |
| 302 | def run_iter(self, data_batch: Sequence[dict]) -> None: |
| 303 | """Iterate one mini-batch. |