tensorflow——分类问题如何计算准确率以及top5准确率

我们在使用深度学习解决一个分类问题的时候,需要计算准确率来评价算法,有的时候会使用top3、top5准确率,那么在tensorflow中如何实现呢?

一般分类网络都会使用交叉熵损失函数,在使用交叉熵之前,对于n分类问题,网络会输出n维的向量。比如说你要分猫和狗,就是一个二分类问题,网络输出一个2维的向量。向量的值越大,则对应的类别的可能性就越高。

这个向量我们称之为logits。

因此计算准确率的代码为:

    accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(logits, 1), labels), tf.float32))

其种logits是网络的输出,labels是对应的真实标签。

函数解析:

tf.argmax():https://blog.csdn.net/wenqiwenqi123/article/details/108450189

tf.equal():https://blog.csdn.net/wenqiwenqi123/article/details/108450366

tf.cast():https://blog.csdn.net/wenqiwenqi123/article/details/108450503

tf.reduce_mean():https://blog.csdn.net/wenqiwenqi123/article/details/108450635

总体来说,先找出logits中的最大值对应的类别,再计算这个类别是否跟真实标签一致,再转换数据类型到float32,再计算平均值。

 

那么topk准确率如何计算呢?tf中有现成的函数。

代码如下:

probabilities = tf.nn.softmax(logits)
accuracy_in_top_k = tf.reduce_mean(tf.cast(tf.nn.in_top_k(probabilities, labels, top_k), tf.float32))

当计算top5准确率的时候top_k为5,同理在计算topk准确率的时候top_k为k。

你可能感兴趣的:(tensorflow,tensorflow,python,深度学习,分类)