Python 多标签分类中的精度计算

Python 多标签分类中的精度计算,python,python-3.x,tensorflow,multilabel-classification,Python,Python 3.x,Tensorflow,Multilabel Classification,我在MSCOCO数据集上使用tensorflow,该数据集有80个不同的类,每个图像可以包含多个类(多标签),这在我的输入中被建模为每个图像80个元素的列表,在正确的类中包含1,在错误的类中包含0 我试图通过检查预测的logits层中1的数量并将其与输入的真实标签进行元素比较来计算精度 使用tf.equal(logits,truelabels)是不适用的,因为有80个类中有大量的零可以正确预测。所以我最终得到了一个高精度的数字和错误的预测 我试图使用tf.map\u fn将张量分解为元素,但显然

我在MSCOCO数据集上使用tensorflow,该数据集有80个不同的类,每个图像可以包含多个类(多标签),这在我的输入中被建模为每个图像80个元素的列表,在正确的类中包含1,在错误的类中包含0

我试图通过检查预测的logits层中1的数量并将其与输入的真实标签进行元素比较来计算精度

使用
tf.equal(logits,truelabels)
是不适用的,因为有80个类中有大量的零可以正确预测。所以我最终得到了一个高精度的数字和错误的预测

我试图使用
tf.map\u fn
将张量分解为元素,但显然我无法在函数中使用类似计数器的变量从真标签批中选择当前真标签(
Y

这是我的密码:

rounded = tf.round(Y)
C = 0
V = 0
sumseen = 0.
sumtrue = 0.
avgg = 0.

def avgfunc(elm):
  global C
  global V
  global sumseen
  global sumtrue
  global avgg
  tru = Y_[C]
  ***tf.add(V,1)***
  cond1 = tf.count_nonzero(tf.cast(tf.equal(elm,tf.constant(1.,tf.float32)),tf.float32))
  cond2 = tf.count_nonzero(tf.cast(tf.equal(elm,tru[V]),tf.float32))
  if(cond1 == 1):
      sumseen+=1
      if(cond2 == 1):
          sumtrue+=1
  ***if(V >= 79):
      V = 0
      avgg = ((sumtrue/sumseen)*100) if sumseen !=0 else 0***
  return sumseen

def _comparefunc(elem_probs):
  global C
  tru = Y_[C]
  mapout = tf.map_fn(avgfunc, elem_probs)
  ***C = C+1
  if(C == 49):
      C = 0***
  return avgg

outputafter = tf.map_fn(_comparefunc, rounded)
accuracyofbatch = tf.reduce_mean(outputafter)

最好用注释来标记代码中的关键行,而不是***-它们可能会混淆读者,并使复制和粘贴代码以重现问题变得更加困难。