Test for whole dataset Args: dataloader: paddle.io.DataLoader, dataloader instance model: nn.Layer, a ViT model criterion: nn.criterion total_batch: int, total num of batches for one epoch debug_steps: int, num of iters to log info, default: 100 lo
(dataloader, model_tgt, criterion, total_batch, debug_steps=100)
| 69 | |
| 70 | |
| 71 | def test(dataloader, model_tgt, criterion, total_batch, debug_steps=100): |
| 72 | """Test for whole dataset |
| 73 | Args: |
| 74 | dataloader: paddle.io.DataLoader, dataloader instance |
| 75 | model: nn.Layer, a ViT model |
| 76 | criterion: nn.criterion |
| 77 | total_batch: int, total num of batches for one epoch |
| 78 | debug_steps: int, num of iters to log info, default: 100 |
| 79 | logger: logger for logging, default: None |
| 80 | Returns: |
| 81 | test_loss_meter.avg: float, average loss on current process/gpu |
| 82 | test_acc1_meter.avg: float, average top1 accuracy on current process/gpu |
| 83 | test_time: float, test time |
| 84 | """ |
| 85 | model_tgt.eval() |
| 86 | losses = [] |
| 87 | accuracies = [] |
| 88 | time_st = time.time() |
| 89 | |
| 90 | with paddle.no_grad(): |
| 91 | for batch_id, data in enumerate(dataloader): |
| 92 | image = data[0] |
| 93 | label = paddle.unsqueeze(data[1], 1) |
| 94 | logits, _, _= model_tgt(image) |
| 95 | |
| 96 | loss = criterion(logits, label) |
| 97 | acc = paddle.metric.accuracy(logits, label) |
| 98 | accuracies.append(acc.numpy()) |
| 99 | losses.append(loss.numpy()) |
| 100 | |
| 101 | avg_acc, avg_loss = np.mean(accuracies), np.mean(losses) |
| 102 | |
| 103 | if batch_id % debug_steps == 0 and batch_id != 0: |
| 104 | print( |
| 105 | f"Val Step[{batch_id:04d}/{total_batch:04d}], " + |
| 106 | f"Avg Loss: {avg_loss}, " + |
| 107 | f"Avg Acc@1: {avg_acc}, ") |
| 108 | |
| 109 | val_time = time.time() - time_st |
| 110 | return avg_loss, avg_acc, val_time |
| 111 | |
| 112 | |
| 113 | def test_cnn(args): |