(train_loader, model, criterion, optimizer, epoch)
| 173 | return res |
| 174 | |
| 175 | def train(train_loader, model, criterion, optimizer, epoch): |
| 176 | batch_time = AverageMeter() |
| 177 | data_time = AverageMeter() |
| 178 | losses = AverageMeter() |
| 179 | top1 = AverageMeter() |
| 180 | top5 = AverageMeter() |
| 181 | |
| 182 | # freeze also batch norm layers |
| 183 | model.eval() |
| 184 | |
| 185 | end = time.time() |
| 186 | for i, (input, target) in enumerate(train_loader): |
| 187 | # measure data loading time |
| 188 | data_time.update(time.time() - end) |
| 189 | |
| 190 | # compute output |
| 191 | input_cu, target_cu = input.cuda(), target.cuda() |
| 192 | output = model(input_cu) |
| 193 | loss = criterion(output, target_cu) |
| 194 | # measure accuracy and record loss |
| 195 | prec1, prec5 = accuracy(output.data, target_cu, topk=(1, 5)) |
| 196 | losses.update(loss.item(), input.size(0)) |
| 197 | top1.update(prec1.item(), input.size(0)) |
| 198 | top5.update(prec5.item(), input.size(0)) |
| 199 | |
| 200 | # compute gradient and do SGD step |
| 201 | optimizer.zero_grad() |
| 202 | loss.backward() |
| 203 | optimizer.step() |
| 204 | |
| 205 | # measure elapsed time |
| 206 | batch_time.update(time.time() - end) |
| 207 | end = time.time() |
| 208 | |
| 209 | if args.verbose and i % 100 == 0: |
| 210 | logger.info('Epoch: [{0}][{1}/{2}]\t' |
| 211 | 'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t' |
| 212 | 'Data {data_time.val:.3f} ({data_time.avg:.3f})\t' |
| 213 | 'lr {3}\t' |
| 214 | 'Loss {loss.val:.4f} ({loss.avg:.4f})\t' |
| 215 | 'Prec@1 {top1.val:.3f} ({top1.avg:.3f})\t' |
| 216 | 'Prec@5 {top5.val:.3f} ({top5.avg:.3f})' |
| 217 | .format(epoch, i, len(train_loader), optimizer.param_groups[0]['lr'], \ |
| 218 | batch_time=batch_time, data_time=data_time, loss=losses, \ |
| 219 | top1=top1, top5=top5)) |
| 220 | |
| 221 | |
| 222 | def validate(val_loader, model, criterion): |
no test coverage detected