我是靠谱客的博主 怡然冷风,最近开发中收集的这篇文章主要介绍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:参数
- DESCENDING 降序
- ASCENDING 升序
- 默认 ASCENDING 升序
axis 参数
- 默认 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)
- 参数 k 默认为 1
- 参数 sorted 默认为 True
- 默认一定是 最后一个维度上的排序
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复