def eval_semantics(scores, gt, args):
from sklearn.metrics import roc_auc_score
num_semantics = gt.shape[1]
acc, auc = np.nan*np.zeros((num_semantics,)), np.nan*np.zeros((num_semantics,))
if args.semantics == ATTRIBUTES:
for s, (pred, lbl) in enumerate(zip(scores.T, gt.T)):
acc[s] = (pred*(lbl-0.5) > 0).astype(float).mean()
if sum(lbl == 0) > 0 and sum(lbl == 1) > 0:
auc[s] = roc_auc_score(lbl, pred)
else:
for s, (pred, lbl) in enumerate(zip(scores, gt.T)):
acc[s] = (pred.argmax(axis=1) == lbl).astype(float).mean()
onehot = np.zeros(pred.shape)
for i, l in enumerate(lbl):
onehot[i, int(l)] = 1
if (onehot.sum(axis=0) == 0).sum() == 0:
auc[s] = roc_auc_score(onehot, pred)
return acc, auc
评论列表
文章目录