`after_iter` contains two parts of logic: * log information * reset setting of resize
(self)
| 216 | pass |
| 217 | |
| 218 | def after_iter(self): |
| 219 | """ |
| 220 | `after_iter` contains two parts of logic: |
| 221 | * log information |
| 222 | * reset setting of resize |
| 223 | """ |
| 224 | # log needed information |
| 225 | if (self.iter + 1) % self.exp.print_interval == 0: |
| 226 | # TODO check ETA logic |
| 227 | left_iters = self.max_iter * self.max_epoch - (self.progress_in_iter + 1) |
| 228 | eta_seconds = self.meter["iter_time"].global_avg * left_iters |
| 229 | eta_str = "ETA: {}".format(datetime.timedelta(seconds=int(eta_seconds))) |
| 230 | |
| 231 | progress_str = "epoch: {}/{}, iter: {}/{}".format( |
| 232 | self.epoch + 1, self.max_epoch, self.iter + 1, self.max_iter |
| 233 | ) |
| 234 | loss_meter = self.meter.get_filtered_meter("loss") |
| 235 | loss_str = ", ".join( |
| 236 | ["{}: {:.3f}".format(k, v.latest) for k, v in loss_meter.items()] |
| 237 | ) |
| 238 | |
| 239 | time_meter = self.meter.get_filtered_meter("time") |
| 240 | time_str = ", ".join( |
| 241 | ["{}: {:.3f}s".format(k, v.avg) for k, v in time_meter.items()] |
| 242 | ) |
| 243 | |
| 244 | logger.info( |
| 245 | "{}, mem: {:.0f}Mb, {}, {}, lr: {:.3e}".format( |
| 246 | progress_str, |
| 247 | gpu_mem_usage(), |
| 248 | time_str, |
| 249 | loss_str, |
| 250 | self.meter["lr"].latest, |
| 251 | ) |
| 252 | + (", size: {:d}, {}".format(self.input_size[0], eta_str)) |
| 253 | ) |
| 254 | self.meter.clear_meters() |
| 255 | |
| 256 | # random resizing |
| 257 | if self.exp.random_size is not None and (self.progress_in_iter + 1) % 10 == 0: |
| 258 | self.input_size = self.exp.random_resize( |
| 259 | self.train_loader, self.epoch, self.rank, self.is_distributed |
| 260 | ) |
| 261 | |
| 262 | @property |
| 263 | def progress_in_iter(self): |
no test coverage detected