| 228 | self.logger.info(f"Checkpoint loaded from epoch {self.current_epoch}") |
| 229 | |
| 230 | def test(self, test_loader: DataLoader) -> Dict[str, float]: |
| 231 | self.logger.info("Starting testing...") |
| 232 | self.model.eval() |
| 233 | |
| 234 | test_loss = 0.0 |
| 235 | correct = 0 |
| 236 | total = 0 |
| 237 | |
| 238 | with torch.no_grad(): |
| 239 | for inputs, targets in tqdm(test_loader, desc="Testing"): |
| 240 | inputs = inputs.to(self.device, non_blocking=True) |
| 241 | targets = targets.to(self.device, non_blocking=True) |
| 242 | |
| 243 | outputs = self.model(inputs) |
| 244 | loss = self.criterion(outputs, targets) |
| 245 | |
| 246 | test_loss += loss.item() |
| 247 | _, predicted = outputs.max(1) |
| 248 | total += targets.size(0) |
| 249 | correct += predicted.eq(targets).sum().item() |
| 250 | |
| 251 | avg_loss = test_loss / len(test_loader) |
| 252 | accuracy = 100. * correct / total |
| 253 | |
| 254 | self.logger.info(f"Test Loss: {avg_loss:.4f} | Test Acc: {accuracy:.2f}%") |
| 255 | |
| 256 | return {'loss': avg_loss, 'accuracy': accuracy} |