Tensorflow 如何检查一个张量的argmax是否等于另一个具有多个相等max的张量的任何argmax?

Tensorflow 如何检查一个张量的argmax是否等于另一个具有多个相等max的张量的任何argmax?,tensorflow,indices,tensor,argmax,Tensorflow,Indices,Tensor,Argmax,因此,通常在单标签分类中,我们使用以下 correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(self.label, 1)) 但是我正在研究多标签分类,所以我想知道如何在标签向量中有多个标签的情况下进行分类。因此,我目前的情况如下 a = tf.constant([0.2, 0.4, 0.3, 0.1]) b = tf.constant([0,1.0,1,0]) empty_tensor = tf.zeros([0]) for

因此,通常在单标签分类中,我们使用以下

correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(self.label, 1))
但是我正在研究多标签分类,所以我想知道如何在标签向量中有多个标签的情况下进行分类。因此,我目前的情况如下

 a = tf.constant([0.2, 0.4, 0.3, 0.1])
 b = tf.constant([0,1.0,1,0])
 empty_tensor = tf.zeros([0])
 for index in range(b.get_shape()[0]):
     empty_tensor = tf.cond(tf.equal(b[index],tf.constant(1, dtype = 
     tf.float32)), lambda:  tf.concat([empty_tensor,tf.constant([index], 
     dtype = tf.float32)], axis = 0), lambda: empty_tensor)

 temp, _ = tf.setdiff1d([tf.argmax(a)], tf.cast(empty_tensor, dtype= tf.int64))
 output, _ = tf.setdiff1d([tf.argmax(a)], tf.cast(temp, dtype = tf.int64))
这给了我maxpreds发生的位置,以及self.label中有1的位置。在上面的例子中,它给出[1],如果argmax不匹配,那么我得到[]

我所面临的问题是,我不知道如何从那里开始,因为我希望如下所示

correct_preds = tf.equal(tf.argmax(preds, 1), tf.argmax(self.label, 1))
self.accuracy = tf.reduce_sum(tf.cast(correct_preds, tf.float32))
这对于单标签分类来说很简单


非常感谢

我认为你不能用softmax实现这一点,所以我假设你的PreD使用的是sigmoids。如果您使用的是sigmoids,则输出将分别在0和1之间。您可以为每个定义一个阈值,可能是0.5,然后通过执行preds>0.5将您的乙状结肠pred转换为标签编码0和1


如果预测值为[0 1]且标签为[1 1],是否将其报告为完全错误或部分错误?我将假设前者。在这种情况下,您将删除tf.argmax调用,而是检查preds和label是否是完全相同的向量,看起来像tf.reduce_alltf.equalpreds,label,axis=0。对于后者,代码看起来像tf.reduce_sumtf.equalpreds,label,axis=0。

首先,非常感谢您的回答。是的,最终这就是我要做的。然而,我仍然会遇到和以前一样的问题来计算正确分类的发生率,在预测和标签中我会有几个分类?没有问题,正确。如果预测值为[0 1]和[1 1],您想将其报告为完全错误还是部分错误?我将假设前者。在这种情况下,您将删除tf.argmax调用,而是检查preds和self.label是否是完全相同的向量,看起来像tf.reduce_alltf.equalplies,label,axis=0。我将把这个添加到答案中。在这种情况下,我实际上想要计算匹配的数量和标签中的总数。所以我将1和2作为输出;如果预测是[01],标签是[11],则应该是。。。。在这种情况下,您希望使用tf.equal后跟tf.reduce_sum。谢谢!这确实是我所要求的。虽然,在尝试了您的解决方案之后,似乎tf.reduce_sum需要首先进行铸造,因为它不处理bool。tf.reduce_可以使用bools检查所有值是否都为真。我的问题更多的是关于如何对相应值的计数进行编码,即预测和真实标签的索引相同。我不会称之为完全重复,因为这个问题专门针对Tensorflow。然而,问题的标题可以改为多标签分类和Tensorflow中的准确性,以便更一般,从而更容易让其他人找到。