-
Notifications
You must be signed in to change notification settings - Fork 0
/
accuracy.py
68 lines (57 loc) · 1.91 KB
/
accuracy.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from advertorch.utils import predict_from_logits
from models import *
import numpy as np
import torch
import csv
labels = []
cln_data = []
with open("data/fer2013.csv", "r") as file:
read = csv.reader(file)
i = 0
for line in read:
if i and i < 550:
labels.append(line[0])
cln = line[1].split(' ')
data = []
for c in cln:
data.append(int(c))
cln_data.append(data)
i += 1
# Calculate the accuracy of filename with 500 samples, too many take up lots of memory
def cal_acc(filename):
with open("data/" + filename, "r") as file:
line = file.readline().split("\t")
line = line[:-1] # \n
pixels = []
n = 0
while line and n < 550: # 48 * 48
for i in range(len(line)):
line[i] = int(float(line[i]) * 255)
pixels.append(line)
n += 1
line = file.readline().split("\t")
line = line[:-1]
pixels = np.array(pixels)
image = []
for line in pixels:
line_trans = line.reshape(48, 48)
line_trans = np.expand_dims(line_trans, axis=0)
line = np.concatenate((line_trans, line_trans, line_trans), axis=0)
image.append(line)
adv = torch.FloatTensor(image)
net = VGG("VGG19")
checkpoint = torch.load('models/PrivateTest_model.t7')
net.load_state_dict(checkpoint['net'])
pred = predict_from_logits(net(adv))
acc = 0
for i in range(500):
if int(labels[i]) == int(pred[i].item()):
acc += 1
accuracy = acc / 500
return accuracy
accuracy_adv = cal_acc("adv.txt")
accuracy_adv_d = cal_acc("adv_defended.txt")
accuracy_cln_d = cal_acc("cln_defended.txt")
print("Accuracy on adv: %.2f" % float(accuracy_adv * 100))
print("Accuracy on adv_defended: %.2f" % float(accuracy_adv_d * 100))
print("Accuracy on cln_defendec: %.2f" % float(accuracy_cln_d * 100))