BUG: fluid.layers.accuracy not work correctly
Created by: parap1uie-s
现在accuracy的实现方法,是对input沿行方向取argmax后,取得最大概率下标,与稠密的label进行比对。
但当input的类别维度为1时,argmax结果显然恒为0。因此accuracy的取值将由label中0的占比来决定,而不是真正的“正确率”
可见目前的实现:
def accuracy(input, label, k=1, correct=None, total=None):
......
topk_out, topk_indices = nn.topk(input, k=k) # Bug!!!
acc_out = helper.create_variable_for_type_inference(dtype="float32")
如果输入的input
是一个形如(bs, 1)的二分类模型输出时,显然topk输出结果恒为0,导致之后的准确率计算逻辑无意义
建议修复方案:
增加逻辑判断
def accuracy(input, label, k=1, correct=None, total=None):
......
if input.shape[1] == 1:
do something.
else:
topk_out, topk_indices = nn.topk(input, k=k)
acc_out = helper.create_variable_for_type_inference(dtype="float32")