-
Notifications
You must be signed in to change notification settings - Fork 2
/
eval.py
52 lines (35 loc) · 1.4 KB
/
eval.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import torch
import yaml
import torch.utils.data as data
import torchvision.datasets as datasets
import torchvision.transforms as transforms
from model import ClassifyNet
def load_configs():
with open('configs/eval.yaml', 'r') as configs:
return yaml.safe_load(configs)
configs = load_configs()
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
dataset = datasets.ImageFolder('datasets/test', transform=transform)
dataset_size = len(dataset)
dataloader = data.DataLoader(dataset, configs['batch-size'], num_workers=configs['num-workers'])
dataloader_size = len(dataloader)
device = torch.device(configs['device'])
accuracy = 0
model = ClassifyNet(num_classes=configs['num-classes'], pretrain=False)
model = model.to(device)
model.load_state_dict(torch.load(configs['model-path'], map_location=device, weights_only=True))
print(f'\n---------- Evaluation Start At: {str(device).upper()} ----------\n')
with torch.no_grad():
model.eval()
for step, (inputs, labels) in enumerate(dataloader, start=1):
inputs = inputs.to(device)
labels = labels.to(device)
outputs = model(inputs)
accuracy += (torch.argmax(outputs, dim=1) == labels).sum().item()
print(f'\rProgress: [{step}/{dataloader_size}]', end='')
accuracy /= dataset_size
print(f'\nAccuracy: {accuracy:.3f}')
print('\n---------- Evaluation Finish ----------\n')