关于facenet 的accuracy 和 validation rate 理解

 

 


使用davidsandberg大侠的facenet  代码时, https://github.com/davidsandberg/facenet , 对于训练结果评价,提示类似如下:
Accuracy: 0.99650+-0.00252
Validation rate: 0.98367+-0.00948 @ FAR=0.00100


可以看到有两个评价方法,accracy 和 validation rate。 我对 accracy 和 val rate的计算方式是明白的,但中间的逻辑(为什么要这样算) 有疑问,很长时间都没弄明白..
首先  计算方式如下:
  accuracy              =(判断正确的 同一个人+ 判断正确的 不同的人) / 所有数据     
  validation rate     =  判断正确的同一个人的数量 / 所有的同一个人 的数量        (这时有个数字 代码写死为0.001,后面细说)   
但为什么要有两个指标评价? accuracy不就够了么? 而且貌似val rate比accuracy 更重要,更能反映训练结果的好坏。

 

 

 

 

 

开始时,我的训练的结果是acc 90%, val rate 10%, 后来提升到了 acc 98%, val rate 60%

我的疑问/思路,举个例子来说 当acc 90%, val rate 10%时:

设所有数据是100份,  现在我的accuraccy为90%,则 (判断正确 同一个人+ 判断正确 不同的人 )总和为90人,

假设同一人的情况 实际数量为50:10%val则 5个判断对,则判断正确不同的人需要90-5=85个,  50+85>100, 不可能
假设同一人的情况 实际数量为80:10%val则 8个判断对,则判断正确不同的人需要90-8=72个,  80+72>100, 不可能
假设同一人的情况 实际数量为10:10%val则 1个判断对,则判断正确不同的人需要90-1=89个,  10+89约等于100,有可能

而最后一种就是不平衡数据集,   而我的测试集是比较平衡的,不会100组数据中只有10个人左右是相同的 。 问题到底在哪呢?


先看/理解好 知乎这条问题:

https://www.zhihu.com/question/30750849

 

现在看垂直的这条分界线 也就是我们最后要设定的判断阈值,把交叉的部分分成了假正 假负 两块区域。

现在把 误报率 也就是假正 ,变为很小的0.001,就是要把蓝色的线 移到靠近右边的虚线。(把假正降到很小很小的0.001)
而这时,validtateion rate不高,就说明我们训练的结果 还不够分得开,交叉的地方太大了:假正假负都太多, 我们需要 假正假负都尽量小

如果我们的是模型训练得好(类似下图,交叉的地方很小),误报率 即使设为很低的0.001, val rate也可以高。下图是我们的训练目标, 上图是我们还没训练得足够好的情况。

 

所以,与不平衡数据集没关系,是我们的网络训练得不够。


那为什么模型训练得不好,accuracy仍可达90%或更高以上呢? 我想像中的,只有达到上图的效果了,accuracy才会达到99%, 实际下图这种情况,也可以达到accuracy99%, validation rate 60%。

另外红线和蓝线,分别就是accuracy和validation rate 的门限值设置方法。也就是为什么有两个评价标准,且val rate比accuracy 更重要,更能反映训练结果的好坏。

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值