【stay foolish】代码片段
学习工作中遇到的一些代码,记录于此。
测试结果不一致
PyTorch,python3.7。
训练好的模型,固定的测试数据和参数,几次测试结果不一样。猜测是因为随机性。
参考: pytorch文档
np.random.seed(11) # 11为指定随机种子,可变动
torch.manual_seed(11)
torch.cuda.manual_seed_all(11)
random.seed(11)
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
在此之前,查看所有项目代码,有无random相关,取消随机性即可。
计算EER及阈值
EER:等错误概率是说话人识别中常用的评价标准,是错误接受率(FA)和错误拒绝率(FR)的一个相对平衡点的阈值点,这个阈值点可以作为实际使用阶段的固定阈值。
参考:EER的基本知识和使用
def calculate_eer(y, y_score):
# y denotes groundtruth labels
# y_score denotes the prediction scores
from scipy.optimize import brentq
from sklearn.metrics import roc_curve
from scipy.interpolate import interp1d
fpr, tpr, thresholds = roc_curve(y, y_score, pos_label=1)
eer = brentq(lambda x : 1. - x - interp1d(fpr, tpr)(x), 0., 1.)
thresh = interp1d(fpr, thresholds)(eer)
return eer, thresh