TensorFlow进阶一(张量的范数、最值、均值、和函数、张量的比较)

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

TensorFlow进阶一(张量的范数、最值、均值、和函数、张量的比较)

  • TensorFlow进阶一
    • 一、任务需求
    • 二、任务目标
          • 1、掌握张量的合并
          • 2、掌握张量的分割
          • 3、掌握张量的最值、均值、和函数
          • 4、掌握张量的比较
    • 三、任务环境
          • 1、python3.6
          • 2、tensorflow2.4
          • 3、jupyter
    • 四、任务实施过程
        • (三)、向量范数
        • (四)、最值、均值、和
        • (五)、张量比较
    • 五、任务小结

TensorFlow进阶一

一、任务需求

在介绍完张量的基本操作后,我们来进一步学习张量的进阶操作,如张量的合并与分割、范数统计、张量填充、张量限幅等,本节需要完成张量的合并(包括拼接和堆叠),张量的分割、向量范数、最值、均值、和,张量的比较等功能。

二、任务目标

1、掌握张量的合并
2、掌握张量的分割
3、掌握张量的最值、均值、和函数
4、掌握张量的比较

三、任务环境

1、python3.6
2、tensorflow2.4
3、jupyter

四、任务实施过程

(三)、向量范数

12、在 TensorFlow 中,可以通过 tf.norm(x, ord)求解张量的 L1、L2、∞等范数,其中参数ord 指定为 1、2 时计算 L1、L2 范数,指定为 np.inf 时计算∞ −范数

x = tf.ones([2,2])
tf.norm(x,ord=1) #计算L1范数

在这里插入图片描述

tf.norm(x,ord=2) #计算L2范数

<tf.Tensor: shape=(), dtype=float32, numpy=2.0>

import numpy as np
tf.norm(x,ord=np.inf) # 计算∞范数

在这里插入图片描述

(四)、最值、均值、和

13、考虑 shape 为[4,10]的张量,其中,第一个维度代表样本数量,第二个维度代表了当前样本分别属于10个类别的概率,需要求出每个样本的概率最大值,可以通过tf.reduce_max 函数实现

x = tf.random.normal([4,10]) # 模型生成概率
tf.reduce_max(x,axis=1) # 统计概率维度上的最大值

<tf.Tensor: shape=(4,), dtype=float32, numpy=array([1.8075018, 1.8042752, 1.0641811, 1.9087783], dtype=float32)>

在这里插入图片描述

14、返回长度为 4 的向量,分别代表了每个样本的最大概率值。同样求出每个样本概率的最小值

tf.reduce_min(x,axis=1)

<tf.Tensor: shape=(4,), dtype=float32, numpy=array([-0.4287228, -0.5215661, -1.9173664, -1.5540869], dtype=float32)>

15、求出每个样本的概率的均值

tf.reduce_mean(x,axis=1)

<tf.Tensor: shape=(4,), dtype=float32, numpy=array([ 0.4275422 , 0.2606017 , -0.19171332, 0.38828874], dtype=float32)>

16、当不指定 axis 参数时,tf.reduce_*函数会求解出全局元素的最大、最小、均值、和等数据。

x = tf.random.normal([4,10])
tf.reduce_max(x),tf.reduce_min(x),tf.reduce_mean(x)    

在这里插入图片描述

17、在求解误差函数时,通过 TensorFlow 的 MSE 误差函数可以求得每个样本的误差,需要计算样本的平均误差,此时可以通过 tf.reduce_mean 在样本数维度上计算均值

out = tf.random.normal([4,10]) # 模拟网络预测输出
y = tf.constant([1,2,2,0]) # 模拟真实标签
y = tf.one_hot(y,depth=10) # one-hot 编码
loss = tf.keras.losses.mse(y,out) # 计算每个样本的误差
loss = tf.reduce_mean(loss) # 平均误差,在样本数维度上取均值
loss # 误差标量

在这里插入图片描述

18、与均值函数相似的是求和函数 tf.reduce_sum(x, axis),它可以求解张量在 axis 轴上所有特征的和:

out = tf.random.normal([4,10])
tf.reduce_sum(out,axis=-1) # 求最后一个维度的和

<tf.Tensor: shape=(4,), dtype=float32, numpy=array([ 1.0680336, 1.31221 , 4.050804 , -1.6357648], dtype=float32)>

19、除了希望获取张量的最值信息,还希望获得最值所在的位置索引号,例如分类任务的标签预测,就需要知道概率最大值所在的位置索引号,一般把这个位置索引号作为预测类别。考虑 10 分类问题,我们得到神经网络的输出张量 out,shape 为[2,10],代表了 2 个样本属于 10 个类别的概率,由于元素的位置索引代表了当前样本属于此类别的概率,预测时往往会选择概率值最大的元素所在的索引号作为样本类别的预测值。

out = tf.random.normal([2,10])
out = tf.nn.softmax(out, axis=1) # 通过 softmax 函数转换为概率值
out

在这里插入图片描述
以第一个样本为例,可以看到,它概率最大的索引为𝑖 = 0,最大概率值为 0.1877。由于每个索引号上的概率值代表了样本属于此索引号的类别的概率,因此第一个样本属于 0 类的概率最大,在预测时考虑第一个样本应该最有可能属于类别 0。这就是需要求解最大值的索引号的一个典型应用

20、通过 tf.argmax(x, axis)和 tf.argmin(x, axis)可以求解在 axis 轴上,x 的最大值、最小值所在的索引号

pred = tf.argmax(out, axis=1) # 选取概率最大的位置

<tf.Tensor: shape=(2,), dtype=int64, numpy=array([0, 7])>

可以看到,这 2 个样本概率最大值都出现在索引 0 上,因此最有可能都是类别 0,我们可以将类别 0 作为这 2 个样本的预测类别。

(五)、张量比较

21、为了计算分类任务的准确率等指标,一般需要将预测结果和真实标签比较,统计比较结果中正确的数量来计算准确率。考虑 100 个样本的预测结果,通过 tf.argmax 获取预测类别

out = tf.random.normal([100,10])
out = tf.nn.softmax(out, axis=1) # 输出转换为概率
pred = tf.argmax(out, axis=1) # 计算预测值
pred

在这里插入图片描述
22、变量 pred 保存了这 100 个样本的预测类别值,我们与这 100 样本的真实标签比较

y = tf.random.uniform([100],dtype=tf.int64,maxval=10)
y
<tf.Tensor: shape=(100,), dtype=int64, numpy=
array([1, 3, 7, 0, 0, 2, 9, 6, 0, 3, 3, 4, 7, 8, 8, 3, 2, 9, 6, 0, 1, 6,
       8, 6, 1, 1, 2, 4, 7, 4, 9, 9, 7, 5, 6, 5, 4, 9, 2, 6, 0, 4, 3, 2,
       9, 0, 5, 8, 3, 3, 4, 4, 0, 3, 0, 4, 8, 4, 7, 9, 3, 6, 1, 4, 2, 5,
       1, 9, 9, 1, 1, 2, 7, 8, 9, 0, 7, 6, 1, 1, 2, 8, 1, 2, 6, 0, 8, 2,
       6, 1, 5, 8, 3, 0, 9, 0, 2, 3, 3, 5])>

23、即可获得代表每个样本是否预测正确的布尔类型张量。通过 tf.equal(a, b)(或 tf.math.equal(a,b),两者等价)函数可以比较这 2 个张量是否相等

out = tf.equal(pred,y) # 预测值与真实值比较,返回布尔类型的张量
out
<tf.Tensor: shape=(100,), dtype=bool, numpy=
array([False, False, False,  True, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False,  True, False, False, False, False, False,
       False, False, False,  True, False, False, False, False, False,
       False, False, False, False, False,  True,  True, False, False,
        True, False, False, False, False, False, False, False,  True,
       False, False, False, False, False,  True, False, False, False,
       False, False, False, False, False, False, False, False,  True,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False,  True, False, False, False, False,
       False])>

24、tf.equal()函数返回布尔类型的张量比较结果,只需要统计张量中 True 元素的个数,即可知道预测正确的个数。为了达到这个目的,我们先将布尔类型转换为整形张量,即 True 对应
为 1,False 对应为 0,再求和其中 1 的个数,就可以得到比较结果中 True 元素的个数

out = tf.cast(out, dtype=tf.float32) # 布尔型转 int 型
correct = tf.reduce_sum(out) # 统计 True 的个数
correct

在这里插入图片描述

五、任务小结

本节主要介绍了将多个张量在某个维度上合并为一个张量,张量的合并可以使用拼接(Concatenate)和堆叠(Stack)操作实现,拼接操作并不会产生新的维度,仅在现有的维度上合并,而堆叠会创建新维度。选择使用拼接还是堆叠操作来合并张量,取决于具体的场景是否需要创建新维度。合并操作的逆过程就是分割,将一个张量分拆为多个张量。在神经网络的计算过程中,经常需要统计数据的各种属性,如最值、最值位置、均值、范数等信息。由于张量通常较大,直接观察数据很难获得有用信息,通过获取这些张量的统计信息可以较轻松地推测张量数值的分布。为了计算分类任务的准确率等指标,一般需要将预测结果和真实标签比较,统计比较结果中正确的数量来计算准确率。通过本节需要掌握以下知识:

  • 掌握张量的合并
  • 掌握张量的分割
  • 掌握张量的最值、均值、和函数
  • 掌握张量的比较

–end–

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科研工作学习中常用的录制动图软件——screenToGif

一、前言 俗话说&#xff0c;字不如表&#xff0c;表不如图&#xff0c;静图不如动图。 动图给人的直观感受&#xff0c;还是很不错的。在曾经的学生期间&#xff0c;进行组会汇报&#xff1b;还是如今工作中&#xff0c;给领导汇报。我经常使用screenToGif这款软件&#xff…

Yolov5 v7.0目标检测——详细记录环境配置、自定义数据处理、模型训练与常用错误解决方法(数据集为河道漂浮物)

1. Yolov5 YOLOv5是是YOLO系列的一个延伸&#xff0c;其网络结构共分为&#xff1a;input、backbone、neck和head四个模块&#xff0c;yolov5对yolov4网络的四个部分都进行了修改&#xff0c;并取得了较大的提升&#xff0c;在input端使用了Mosaic数据增强、自适应锚框计算、自…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-UNIX时间戳

UNIX时间戳 UNIX时间戳最早是在UNIX系统使用的&#xff0c;所以叫做UNIX时间戳&#xff0c;之后很多由UNIX演变而来的系统也继承了UNIX时间戳的规定&#xff0c;目前linux&#xff0c;windows&#xff0c;安卓这些操作系统的底层计时系统都是用UNIX时间戳 时间戳这个计时系统和…

5 个有用的 Linux Shell 转义序列

目录 ⛳️推荐 前言          1、退格符 2、换行符 3、换页符 4、制表符 5、Unicode ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前言          如何在你的…

计算机网络-IS-IS路由计算

前面已经学习了建立IS-IS邻接关系和同步LSDB&#xff0c;然后基于此路由器会进行路由计算。 一、路由计算 因为IS-IS路由器有不同的级别&#xff0c;只维护自身级别的LSDB&#xff0c;因此就是Level-1只有区域内的路由信息&#xff0c;Level-2有Level-2的路由信息&#xff0c;L…

初始Maven

1.背景 问题引入&#xff1a;为什么要使用 Maven&#xff1f; 1.1 添加第三方 jar 包 在 JavaEE 开发领域&#xff0c;有大量的第三方框架和工具可以供我们使用。使用这些 jar 包最简单的方法就是复制粘贴到 WEB-INF 目录中的 lib 目录下。但是会导致每次创建一个新工程就需要将…

【Linux】信号的产生

目录 一. 信号的概念signal() 函数 二. 信号的产生1. 键盘发送2. 系统调用kill()raise()abort() 3. 软件条件alarm() 4. 硬件异常除零错误:野指针: 三. 核心转储 一. 信号的概念 信号是消息的载体, 标志着不同的行为; 是进程间发送异步信息的一种方式, 属于软中断. 信号随时都…

医药流通企业如何安全访问医药ERP?无需公网IP和改变现有IT架构

随着目前医药流通行业竞争的加剧&#xff0c;市场供应日趋饱和&#xff0c;传统的粗放式管理缺陷逐渐暴露&#xff0c;导致从事医药行业企业的利润不同程度的下滑&#xff0c;想要满足医药行业客户的个性化需求&#xff0c;为适应企业未来发展&#xff0c;医药流通行业越来越多…

Docker 安装 Mongo

创建宿主机目录 在你的宿主机上创建必要的目录来存储 MongoDB 的数据和配置文件。这样做可以保证即使容器被删除&#xff0c;数据也能得到保留。 mkdir -p /develop/mongo/data mkdir -p /develop/mongo/config创建 MongoDB 配置文件 创建一个名为 mongod.conf 的 MongoDB 配…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的&#xff0c;原码反码补码都相同 我们来看看负数&#xff1a; 以-5为例 原码&#xff1a;10000000 00000000 00000000 0…

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

【HTML】页面引用Vue3和Element-Plus

在现代前端开发中&#xff0c;Vue 3 和 Element Plus 是非常受欢迎的技术。Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架&#xff0c;而 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;提供了丰富的 UI 组件&#xff0c;帮助开发者快速构建高质量的前端应用。 …

frp 实现 http / tcp 内网穿透(穿透 wordpress )

frp 实现 http / tcp 内网穿透&#xff08;穿透 wordpress &#xff09; 1. 背景简介与软件安装2. 服务端配置2.1 配置文件2.2 wordpress 配置文件2.3 frps 自启动 3.客户端配置3.1 配置文件3.2 frpc 自启动 同步发布在个人笔记frp 实现 http / tcp 内网穿透&#xff08;穿透 w…

多目标粒子群算法及其MATLAB实现

多目标粒子群优化&#xff08;Multi-Objective Particle Swarm Optimization, MOPSO&#xff09;算法是一种基于种群的优化算法&#xff0c;它结合了粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;和多目标优化的思想。多目标粒子群&#xff08;MOPSO&am…

DevOps(八)Jenkins的Maven和Git插件

一、Maven简介 Maven是一个构建生命周期管理和理解工具&#xff0c;用于Java项目。它提供了标准化的构建流程&#xff0c;并简化了从项目编译到文档生成等各种构建方面的管理。 Maven是由Apache软件基金会开发和维护的一个流行的项目管理工具。它的设计目的是简化Java项目的构…

PE结构(二)PE头字段说明

PE头字段 DOS头 PE标记 标准PE头 可选PE头 我们今天分析一下PE头字段中所有重要成员的含义 DOS头 DOS头中我们需要去分析的是如下两个成员&#xff1a; 1.WORD e_magic&#xff1a;MZ标记&#xff0c;用于判断是否为可执行文件&#xff0c;即如果显示4D 5A&#xff0c;…

[2021年最新]国产时序性数据TDenige入门

一、TDenige简介 TDengine&#xff1a;是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品&#xff0c;它不依赖任何第三方软件&#xff0c;也不是优化或包装了一个开源的数据库或流式计算产品&#xff0c;而是在吸取众多传统关系型数据库、NoS…

图搜索的经典启发式算法A星(A*、A Star)算法详解

文章目录 1. 引言2. 广度优先搜索3. Dijkstra 算法4. 启发式优先搜索&#xff08;Heuristic&#xff09;4.1 贪心最佳优先搜索4.2 A*搜索 1. 引言 在许多场景中&#xff0c;我们常会遇到一类问题&#xff0c;即“找到一个位置到另一个位置的距离最短&#xff08;用时最少&…

ELK 日志分析系统(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

ubuntu 24.04 beta server NAT模式上网设置

在Ubuntu 24.04 Beta上设置网络通常涉及使用命令行工具。以下是设置静态IP地址和动态IP地址的步骤&#xff1a; 动态IP设置&#xff1a; 查找你的网络接口名称&#xff1a; ip a ens37是我NAT模型的一张网卡&#xff0c;此时是没有ip的。 下面介绍如何NAT模式下添加DHCP动态…