TensorFlow2.0 数组排序 正确率计算(top_k)

import tensorflow as tf
import numpy as np
print(tf.__version__)

1.数组排序

tf.sort tf.argsort

# 创建 0-4的数组  随机打散
arry = tf.random.shuffle(tf.range(0, 5))
print(ary)

# 降序排序 tf.sort
arry_sort = tf.sort(arry, direction="DESCENDING")
print(arry_sort)

# 降序序号 tf.argsort
arry_argsort = tf.argsort(arry, direction="DESCENDING")
print(arry_argsort)

# 使用降序序号 tf.gather
print(tf.gather(arry, arry_argsort))

在这里插入图片描述

# 创建 3*3 的随机二维数组 
arry = tf.random.uniform((3, 3), maxval= 10, dtype=tf.int32)
print(arry)

# 对二维数组 升序 排序(默认最后一个维度) axis=-1
arry_sort = tf.sort(arry)
print("二维数组排序 升序:\n", arry_sort.numpy())

# 对二维数组 降序排序
arry_sort_descending = tf.sort(arry, direction="DESCENDING")
print("二维数组排序 降序:\n", arry_sort_descending.numpy())

# 获取二维数组 升序排序  索引
arry_argsort = tf.argsort(arry)
print("二维数组排序 升序索引:\n", arry_argsort)

在这里插入图片描述

2.正确率计算(top_k)

tf.math.top_k

# 创建 随机的 3*3 二维数组
arry = tf.random.uniform((3, 3), maxval= 10, dtype=tf.int32)
print(arry)

# tf.math.top_k 获取 二维数组 前两个
arry_topk = tf.math.top_k(arry, 2)

# 获取结果的 索引
print(arry_topk.indices)

# 获取结果的 排序后的值
print(arry_topk.values)

在这里插入图片描述

3.计算Top5的正确率

# top_k函数
def accuracy(y_pred, y_ture, k=(1,)):
    # 获取 k的最大值
    max_k = max(k)
    
    # 获取数据数量
    data_len = y_ture.shape[0]
    
    # 输入数据 top_k 的索引值
    y_pred = tf.math.top_k(y_pred, max_k).indices
    # 转置 数组 
    y_pred = tf.transpose(y_pred, perm=[1, 0])
    
    # 目标 broadcast
    y_ture_b = tf.broadcast_to(y_ture, y_pred.shape)
    
    # 对比 正确与否
    correct = tf.equal(y_pred, y_ture_b)
    res = []
    # 循环统计 
    for i in k:
        correct_k = tf.cast(tf.reshape(correct[:i], [-1]), dtype=tf.float32)
        correct_k = tf.reduce_sum(correct_k)
        accy = correct_k * (100 / data_len)        
        res.append(accy.numpy())
    return res
# top_k 计算 正确率

# 创建 10 * 6 的随机二维数组
y_pred = tf.random.normal((10, 6))
# tf.math.softmax  总和归一化
y_pred = tf.math.softmax(y_pred, axis=-1)
print(y_pred)

# 随机 生成 10个 目标结果
y_true = tf.random.uniform((10,), maxval=6, dtype=tf.int32)
print(y_true)

# 获取最大值索引 预测值 
y_pred_max = tf.argmax(y_pred, axis=1)
print(y_pred_max)


# 调用函数 计算 正确率
acc = accuracy(y_pred, y_true, (1, 2, 3, 4, 5))
print(acc)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廷益--飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值