-
Notifications
You must be signed in to change notification settings - Fork 0
/
dev.py
77 lines (66 loc) · 2.47 KB
/
dev.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
69
70
71
72
73
74
75
76
77
import numpy as np
import os
from callback import load_generator_data
from configparser import ConfigParser
from generator import custom_image_generator
from models.densenet121 import get_model
from utility import get_sample_counts
from keras.preprocessing.image import ImageDataGenerator
from sklearn.metrics import roc_auc_score
def modelpredict():
# parser config
config_file = "./config.ini"
cp = ConfigParser()
cp.read(config_file)
# default config
output_dir = cp["DEFAULT"].get("output_dir")
class_names = cp["DEFAULT"].get("class_names").split(",")
# test config
batch_size = cp["DEV"].getint("batch_size")
use_best_weights = cp["DEV"].getboolean("use_best_weights")
# parse weights file path
output_weights_name = cp["TRAIN"].get("output_weights_name")
weights_path = os.path.join(output_dir, output_weights_name)
best_weights_path = os.path.join(output_dir, f"best_{output_weights_name}")
# get test sample count
test_counts, _ = get_sample_counts(output_dir, "dev", class_names)
symlink_dir_name = "image_links"
dev_data_path = f"{output_dir}/{symlink_dir_name}/dev/"
step_test = int(test_counts / batch_size)
print("** load dev generator **")
test_generator = custom_image_generator(
ImageDataGenerator(horizontal_flip=True, rescale=1./255),
dev_data_path,
batch_size=batch_size,
class_names=class_names,
)
x, y = load_generator_data(test_generator, step_test)
print("** load model **")
model = get_model(class_names)
if use_best_weights:
print("** use best weights **")
model.load_weights(best_weights_path)
else:
print("** use last weights **")
model.load_weights(weights_path)
print("** make prediction **")
y_hat = model.predict(x)
# print(y_hat)
# dev_log_path = os.path.join(output_dir, "dev.log")
# print(f"** write log to {dev_log_path} **")
# aurocs = []
# with open(dev_log_path, "w") as f:
# for i in range(len(class_names)):
# try:
# score = roc_auc_score(y[i], y_hat[i])
# aurocs.append(score)
# except ValueError:
# score = 0
# f.write(f"{class_names[i]}: {score}\n")
# mean_auroc = np.mean(aurocs)
# f.write("-------------------------\n")
# f.write(f"mean auroc: {mean_auroc}\n")
return y,y_hat
if __name__ == "__main__":
y,y_hat = modelpredict()
print(y_hat)