(self, train_dataset)
| 174 | return checkpoint['ep'], checkpoint.get('total_it', 0) |
| 175 | |
| 176 | def train(self, train_dataset): |
| 177 | rank, world_size = get_dist_info() |
| 178 | self.to(self.device) |
| 179 | self.opt_encoder = optim.Adam(self.encoder.parameters(), lr=self.opt.lr) |
| 180 | it = 0 |
| 181 | cur_epoch = 0 |
| 182 | if self.opt.is_continue: |
| 183 | model_dir = pjoin(self.opt.model_dir, 'latest.tar') |
| 184 | cur_epoch, it = self.load(model_dir) |
| 185 | |
| 186 | start_time = time.time() |
| 187 | |
| 188 | train_loader = build_dataloader( |
| 189 | train_dataset, |
| 190 | samples_per_gpu=self.opt.batch_size, |
| 191 | drop_last=True, |
| 192 | workers_per_gpu=4, |
| 193 | shuffle=True, |
| 194 | dist=self.opt.distributed, |
| 195 | num_gpus=len(self.opt.gpu_id)) |
| 196 | |
| 197 | logs = OrderedDict() |
| 198 | for epoch in range(cur_epoch, self.opt.num_epochs): |
| 199 | self.train_mode() |
| 200 | for i, batch_data in enumerate(train_loader): |
| 201 | self.forward(batch_data) |
| 202 | log_dict = self.update() |
| 203 | for k, v in log_dict.items(): |
| 204 | if k not in logs: |
| 205 | logs[k] = v |
| 206 | else: |
| 207 | logs[k] += v |
| 208 | it += 1 |
| 209 | if it % self.opt.log_every == 0 and rank == 0: |
| 210 | mean_loss = OrderedDict({}) |
| 211 | for tag, value in logs.items(): |
| 212 | mean_loss[tag] = value / self.opt.log_every |
| 213 | logs = OrderedDict() |
| 214 | print_current_loss(start_time, it, mean_loss, epoch, inner_iter=i) |
| 215 | |
| 216 | if it % self.opt.save_latest == 0 and rank == 0: |
| 217 | self.save(pjoin(self.opt.model_dir, 'latest.tar'), epoch, it) |
| 218 | |
| 219 | if rank == 0: |
| 220 | self.save(pjoin(self.opt.model_dir, 'latest.tar'), epoch, it) |
| 221 | |
| 222 | if epoch % self.opt.save_every_e == 0 and rank == 0: |
| 223 | self.save(pjoin(self.opt.model_dir, 'ckpt_e%03d.tar'%(epoch)), |
| 224 | epoch, total_it=it) |
no test coverage detected