记一个神奇的Bug

多年以后,当Abraham凝视着一行行新时代的代码在屏幕上川流不息的时候,他会想起2019年4月17日那个不平凡夜晚,以及在那个夜晚他发现的那个不可思议的Bug。

虽然像无数个普普通通的夜晚一样,我在公司加班,一样ssh到公司在北京的服务器,但是发现resnet50的计算精度比上一版代码低了1%。一通着急忙慌的Debug之后无济于事,只能求助于Git来比较新旧版本异同。

由于精度降低的幅度很小,怀疑跟pool操作有关。最终发现是一个与一个未初始化的short整型数据有关。这个整型数据是pool操作的求和累加器,由于没有初始化,又由于某种机缘巧合,它的初始值是一个在0-20左右浮动的小值,这个小值在进行7×7的求和与average pool之后起到了抵消强制类型转换截断误差的作用(由于求和对象是ReLU之后的值,都是正值,故截断误差也都是正值)。

强制类型转换切记+0.5/-0.5来四舍五入。

转载于:https://www.cnblogs.com/blue-box/p/10726620.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值