背景:
在进行深度学习相关实验时遇到一个奇怪的问题,卡了很久,一直找不到解决方案,最后还是导师一针见血。特此记录,希望能帮助到你。
问题描述
我取出网络中的权重参数,获得等于某个值的张量索引
原始代码如下:
高亮部分是核心代码:会获得张量weight_copy等于attn_thre的索引(二维);
然后发现程序并不像想象中的进行,于是进行调试。进行调试时候发现这个aux_index只有1个值,如下图:
调试分析:
进行调试,阈值attn_thre为0.9896,再看weight_copy里的显示如下:
仔细查看weight_copy张量里的数据,是有很多值为0.9896的,那为什么aux_index只有1个值呢?
我单独将weight复制下来到另一个文件中测试如下:
进行调试,发现aux_index里面的值不为1:
也就是有25个值,同样的数据,为什么会得到不一样的结果?
原因解析:
我又做了不少实验,结果是相同的数据在不一样的程序中不一样,一度怀疑是API出现了问题等等,卡了好久最后终于真相大白:pycharm显示的数据精度问题,即调试看到的数据为0.9896,实际上可能为0.98963545,weight_copy里面张量的值也是同样的道理,根据这个重新修改算法得到正确的程序。
总计:
有时候眼见也不一定为真,数据精度这一难注意到的问题今后也要多加考虑。