Tensorflow2.0笔记 - tensor排序操作

        本笔记主要记录sort,argsort,以及top_k操作,加上一个求Top K准确度的例子。

import tensorflow as tf
import numpy as nptf.__version__#sort,argsort#对1维的tensor进行排序
tensor = tf.random.shuffle(tf.range(10))
print(tensor)
#升序
print("======tf.sort(direction='ASCENDING'):", tf.sort(tensor, direction='ASCENDING'))
#降序
print("======tf.sort(direction='DESCENDING'):", tf.sort(tensor, direction='DESCENDING'))
#argsort,返回排序后元素对应原始数据元素的index
print("======tf.argsort(direction='DESCENDING'):", tf.argsort(tensor, direction='DESCENDING'))
args = tf.argsort(tensor, direction='DESCENDING')
print("======Max element:", tensor[args[0]])#多维tensor排序
tensor = tf.random.uniform([3,3], maxval=10, dtype=tf.int32)
print(tensor)#不带参数,默认升序
print("======tf.sort():", tf.sort(tensor))
#降序
print("======tf.sort(direction='DESCENDING'):", tf.sort(tensor, direction='DESCENDING'))
#argsort
print("======tf.argsort(direction='DESCENDING'):", tf.argsort(tensor, direction='DESCENDING'))#top_k得到前最大/最小值
tensor = tf.random.uniform([3,3], maxval=10, dtype=tf.int32)
print(tensor)
#top_k返回值主要有indices和values
#indices返回top k个元素的下标数据
#values返回top k个元素的值
#得到最大的前两个元素
topN = tf.math.top_k(tensor, 2)
print("=====Top 2 indices:", topN.indices)
print("=====Top 2 values :", topN.values)#top-k accuracy
#假设下面的tensor表示各个类别的预测概率信息,真实的标签类别是2(下标)
# tensor = tf.convert_to_tensor([0.1, 0.2, 0.3, 0.4])
# 那么top-1是0.4,对应标签是3,真实标签类别是2,预测错误,top-1预测准确率是0%
# top-2表示返回前两个最有可能的值[0.4,0.3],对应标签是[3,2],top-2预测准确率100%
# 同理,top-3预测准确率100%#举例说明
#假设下面的tensor为两个样本的预测结果
prob = tf.constant([[0.1, 0.2, 0.7], [0.2, 0.65, 0.15]])
print("=====Probabilities:", prob)
#标签信息,第一个样本真实类别是2, 第二个样本真实类别是0
target = tf.constant([2, 0])#使用top_k获得预测结果的indices,这个结果就是对应的类别信息
predictedClasses = tf.math.top_k(prob, 3).indices
predictedClasses = tf.transpose(predictedClasses, perm=[1, 0])
#转置后的矩阵,第一行表示两个个样本top 1的预测值(最有可能的类别),第二行表示top 2的预测值(第二可能的类别)
print(predictedClasses)
#将真实值broadcast_to一个3*2的矩阵(1x2 => 3x2)
target = tf.broadcast_to(target, [3,2])
print(target)#接下来就可以对比preditecdClasses和target
#Predicted       Actual
#[2, 1]          [2,0]   => top1准确度: 1/2 = 50%
#[1, 0]          [2,0]   => top2准确度: 
#                           样本1(第一列前两个元素)和真实的target里有一个能对上,预测正确,计数1
#                           样本2(第2列前两个元素)和真实target的类别有一个能对上,预测正确,计数1
#                           最终结果是: 1+1 / 2(总样本数) = 100%
#[2, 1]          [2,0]   => top3准确度: 100%#实例,返回topk的准确率函数
#output: 网络输出的预测概率结果,[b, N],batchsize个预测值
#target: 真实的类别,[b]
#topk: 表示要返回哪些topk结果,假设topk = [1, 2, 3],表示要返回top1, top2和top3三个准确度结果
def topKAccuracy(output, target, topk=(1,)):maxk = max(topk)batchSize = target.shape[0]pred = tf.math.top_k(output, maxk).indicespred = tf.transpose(pred, perm=[1, 0])real = tf.broadcast_to(target, pred.shape)#转换为0(False),1(True)二值表示的结果correct = tf.equal(pred, real) #correct是一个[k, b]大小的tensorresult = []for k in topk:#取出前k行求和除以样本数量#取出前k行用reshape进行flattencorrect_k = tf.cast(tf.reshape(correct[:k], [-1]), dtype=tf.float32)#求和correct_k = tf.reduce_sum(correct_k)accuracy = float(correct_k / batchSize)result.append(accuracy)return result#模拟一个10个样本,6个类别的预测结果
output = tf.random.normal([10, 6])
print("=====>Original Output:\n", output.numpy())
#softmax处理,让指定axis的数据转换成元素相加结果为1的数据(概率)
output = tf.math.softmax(output, axis=1)
print("=====>Probability(Softmax Output):\n", output.numpy())
print("=====>Argmax:\n", tf.argmax(output, axis=1).numpy())
#模拟一个真实类别信息,10个样本的真实标签
target = tf.random.uniform([10], maxval=6, dtype=tf.int32)
print("=====>Labels:\n", target.numpy())accuracies = topKAccuracy(output, target, topk=(1,2,3,4,5,6))
print("Top1 - Top6 Accuracy:\n", accuracies)

        运行结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯血鸿蒙来了,企业开发者应该关注什么

2024年对于鸿蒙来说是一个里程碑,鸿蒙将正式对外发布 HarmonyOS NEXT 5.0,而此前传言的系统将不再对开发者层面兼容Android等消息将成为定论。 为什么鸿蒙能有这个底气?因为研究机构TechInsights发布预测报告称,华为HarmonyOS将在…

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新:正常刷新网页,网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新:忽略缓存刷新,重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub:https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo:https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式,可监测网站,数据库,Docker…

如何在 Ubuntu 20.04 上安装 MySQL

介绍 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux、Apache、MySQL、PHP/Python/Perl)堆栈的一部分安装。它实现关系模型并使用结构化查询语言(更称为 SQL)来管理其数据。 本教程将介绍如何在 Ubuntu 20…

OpenHarmony—类型转换仅支持as T语法

规则:arkts-as-casts 级别:错误 在ArkTS中,as关键字是类型转换的唯一语法,错误的类型转换会导致编译时错误或者运行时抛出ClassCastException异常。ArkTS不支持使用语法进行类型转换。 当需要将primitive类型(如num…

使用Spring Boot和Tess4J实现本地与远程图片的文字识别

概要: 在本文中,我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字。我们将从添加依赖说起,然后创建服务类以实现OCR,最后展示如何处理…

C++:组合、继承与多态

面向对象设计的重要目的之一就是代码重用,这也是C的重要特性之一。代码重用鼓励人们使用已有的,得到认可并经过测试的高质量代码。多态允许以常规方式书写代码来访问多种现有的且已专门化了的相关类。继承和多态是面向对象程序设计方法的两个最主要的特性…

小程序 样式 WXSS

文章目录 样式 WXSS尺⼨单位样式导⼊选择器⼩程序中使⽤less 样式 WXSS WXSS( WeiXin Style Sheets )是⼀套样式语⾔,⽤于描述 WXML 的组件样式。 与 CSS 相⽐,WXSS 扩展的特性有: 响应式⻓度单位 rpx样式导⼊ 尺⼨单位 rpx (…

Python中的多线程和多进程编程

Python中的多线程和多进程编程是实现并发和并行计算的重要手段。下面分别介绍这两种编程方式。 多线程编程 Python中的多线程编程可以使用内置的threading模块来实现。threading模块提供了线程的创建、同步、通信等操作。 要使用多线程,首先需要导入threading模块…

【PriorityQueue 之 接口介绍and堆排序】

文章目录 常用接口介绍PriorityQueue的性质插入/删除/获取优先级最高的元素 top-k问题:最大或最小的前k个数堆排序总结 常用接口介绍 PriorityQueue的性质 PriorityQueue默认都是小根堆 public class Test {public static void main(String[] args) {PriorityQue…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透?1.2 什么是frp? 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试(通过SSH访问内网机器C)3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

云计算应用管理----TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍

管理员必备技能: 一、云计算的介绍 什么是服务器 •能够为其他计算机提供服务的更高级的电脑 –机架式 –塔式 –机柜式 –刀片式 典型服务模式 •C/S,Client/Server架构 –由服务器提供资源或某种功能 –客户机使用资源或功能 二、TCP/IP协议及配置 •…

tcp/ip分层模型

文章目录 tcp/ip分层模型封装和分用 tcp/ip分层模型 上面这个图主要介绍了osi七层模型和tcp/ip五层模型(有的资料上说的是tcp/ip四层模型,把物理层算在了硬件设备上,这篇文章还是按照五层模型来讲)。但osi七层模型实现起来比较复杂…

SQL 关键字参考手册(三)

目录 SQL 关键字 SQL INSERT INTO 关键字 INSERT INTO SQL INSERT INTO SELECT 关键字 INSERT INTO SELECT SQL IS NULL 关键字 IS NULL SQL IS NOT NULL 关键字 IS NOT NULL SQL JOIN 关键字 INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN SQL LIKE 关键字…

代码随想录算法训练营第16天 | 104.二叉树的最大深度, 111.二叉树的最小深度 ,222.完全二叉树的节点个数

二叉树理论基础: https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 104.二叉树的最大深度 题目链接:https://leetcode.cn/problems/maximum-depth-…

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

如何使用Docker部署导航页工具Dashy并实现任意浏览器远程访问——“cpolar内网穿透”

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

linux-apt 2

文章目录 一、删除包(Removing Packages )1、apt remove package_name2、apt remove package1 package2 package3 ...3、apt purge package14、apt autoremove(没有包名参数) 二、查询1、apt search package_name2、apt show pack…

UR20机械臂学习笔记

UR20机械臂学习笔记 UR20机械臂学习笔记一.使用UR系列机器人第三方库二.UR机器人的初始化 1.连接UR机器人2.设置机器人末端法兰(tcp)3.设置机器人末端负载 三.机器人运动程序 1.机器人移动 (1) MoveJ(2) MoveL(3) MoveP(4) MoveC(5) Translate(6) Stop 2…

最大流解决二分图匹配问题

文章目录 零、前言一、二分图匹配转化为网络流模型1.1建模步骤1.2整数值最大流和二分图匹配的关系1.3代码实现 二、OJ练习P2756 飞行员配对方案问题P3254 圆桌问题 零、前言 阅读本文前,需具备以下知识: 二分图及染色法判定-CSDN博客 二分图最大匹配—…