我是靠谱客的博主 怡然冷风,最近开发中收集的这篇文章主要介绍tensorflow 2.0 高阶操作 之 张量排序OutlineSort/argsortTop_kTop_k accuracy,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

4.3 张量排序

  • Outline
  • Sort/argsort
  • Top_k
  • Top_k accuracy

Outline

  • Sort/argsort
  • Topk
  • Top-5 Acc.

Sort/argsort

a = tf.random.shuffle(tf.range(5))
# <tf.Tensor: id=25, shape=(5,), dtype=int32, numpy=array([3, 2, 0, 4, 1])>
tf.sort(a, direction='DESCENDING')
# <tf.Tensor: id=13, shape=(5,), dtype=int32, numpy=array([4, 3, 2, 1, 0])>
tf.argsort(a, direction='DESCENDING')
#  <tf.Tensor: id=50, shape=(5,), dtype=int32, numpy=array([3, 0, 1, 4, 2])>

idx = tf.argsort(a, direction='DESCENDING')
a_sorted = tf.gather(a, idx)
# <tf.Tensor: id=76, shape=(5,), dtype=int32, numpy=array([4, 3, 2, 1, 0])>

direction:参数

  1. DESCENDING 降序
  2. ASCENDING 升序
  3. 默认 ASCENDING 升序

axis 参数

  1. 默认 axis=-1 最后一个维度。

行维度上排序

a = tf.random.uniform([3,3], maxval=10, dtype=tf.int32)
# <tf.Tensor: id=148, shape=(3, 3), dtype=int32, numpy=
# array([[0, 4, 0],
#        [8, 9, 3],
#        [8, 7, 3]])>
tf.sort(a, direction='DESCENDING')
# <tf.Tensor: id=203, shape=(3, 3), dtype=int32, numpy=
# array([[4, 0, 0],
#        [9, 8, 3],
#        [8, 7, 3]])>
tf.argsort(a, direction='DESCENDING')
# <tf.Tensor: id=242, shape=(3, 3), dtype=int32, numpy=
# array([[1, 0, 2],
#        [1, 0, 2],
#        [0, 1, 2]])>

列维度上排序

a = tf.random.uniform([3,3], maxval=10, dtype=tf.int32)
# <tf.Tensor: id=1988, shape=(3, 3), dtype=int32, numpy=
# array([[7, 3, 0],
#        [8, 8, 6],
#        [2, 6, 1]])>
tf.sort(a, direction='DESCENDING', axis=0)
# <tf.Tensor: id=2185, shape=(3, 3), dtype=int32, numpy=
# array([[8, 8, 6],
#        [7, 6, 1],
#        [2, 3, 0]])>
tf.argsort(a, direction='DESCENDING', axis=0)
# <tf.Tensor: id=2295, shape=(3, 3), dtype=int32, numpy=
# array([[1, 1, 1],
#        [0, 2, 2],
#        [2, 0, 0]])>

Top_k

tf.math.top_k
return (value, indices)

  1. 参数 k 默认为 1
  2. 参数 sorted 默认为 True
  3. 默认一定是 最后一个维度上的排序
a = tf.random.uniform([3,3], maxval=10, dtype=tf.int32)
# <tf.Tensor: id=2399, shape=(3, 3), dtype=int32, numpy=
# array([[6, 3, 6],
#        [4, 7, 4],
#        [9, 6, 9]])>
res = tf.math.top_k(a, k=1, sorted=True)
res.values
# <tf.Tensor: id=3765, shape=(3, 1), dtype=int32, numpy=
# array([[6],
#        [7],
#        [9]])>
res.indices
# <tf.Tensor: id=3766, shape=(3, 1), dtype=int32, numpy=
# array([[0],
#        [1],
#        [0]])>

Top_k accuracy

  • Prob:[0.1, 0.2, 0.3, 0.4]
  • Label:[2]
  • Only consider top-1 prediction: [3]
  • Only consider top-2 prediction: [3, 2]
  • Only consider top-3 prediction: [3, 2, 1]

Top_k 精度 是指在做预测时,选取概率最大的 k 个标签,如果存在真实的标签值,则视为预测正确。 可以看出我们常用的 Top_1 是 Top_k 的特殊情况。当 k 为类别标签数时, Top_k accuracy 为 100%。

prob = tf.constant([[0.1, 0.2, 0.7], [0.2, 0.7, 0.1]])
target = tf.constant([2, 0])

k_b = tf.math.top_k(prob, k=2).indices

target = tf.broadcast_to(target, [2,2])
# <tf.Tensor: id=5115, shape=(3, 2), dtype=int32, numpy=
# # array([[2, 0],
# #        [2, 0],
# #        [2, 0]])>
correct = tf.equal(target, k_b)
# <tf.Tensor: id=6768, shape=(2, 2), dtype=bool, numpy=
# array([[ True, False],
#        [False,  True]])>
bool2int = tf.cast(correct, dtype=tf.int32)
# <tf.Tensor: id=7115, shape=(2, 2), dtype=int32, numpy=
# array([[1, 0],
#        [0, 1]])>
num_of_pre_correct = tf.reduce_sum(bool2int)
# <tf.Tensor: id=7471, shape=(), dtype=int32, numpy=2>
top_k_accuracy = num_of_pre_correct/target.shape[0]
# <tf.Tensor: id=7837, shape=(), dtype=float64, numpy=1.0>

最后

以上就是怡然冷风为你收集整理的tensorflow 2.0 高阶操作 之 张量排序OutlineSort/argsortTop_kTop_k accuracy的全部内容,希望文章能够帮你解决tensorflow 2.0 高阶操作 之 张量排序OutlineSort/argsortTop_kTop_k accuracy所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部